ExcelMerger-文創小農獨立手做 app 幫你合併 Excel 檔

閱讀時間約 7 分鐘
圖片來自 Microsoft Design
ExcelMerger 是個簡單到不行的 app-它幫我們合併 Excel 檔,可以是合併一個檔案內的多個工作表,也可以是合併多個檔案。
安裝完,跑起來的畫面只有一個簡單的拖放區,用戶可以把 Excel 檔從檔案總管拖進去,或是點擊拖放區用開檔案的方式把 Excel 檔讀進去,ExcelMerger 會把這些檔案合併到一個新檔案內,並跳出另存新檔的畫面,剩下的步驟就如同一般的 Windows 操作那樣,把合併好的新檔案放在你喜歡的地方。
雖然說這麼簡單,但還是有些事項要提醒的:
  • 為了保證格式的正確性,ExcelMerge 背後是呼叫 Excel 來做剪下貼上的工作,而不是用第三方工具,所以電腦內得有裝 Excel,也因此這個小 app 是 Windows 限定的。
  • 合併的基礎是每張表都有一致的欄位,這個小 app 並不具備人工智慧判斷欄位的性能,它其實只幫我們做重複性的複製、貼上而已。
  • 每張表的第一列通常是標題列,ExcelMerger 只會保留一次標題列,所以不用擔心合併後的檔案會出現重複的標題列,除此之外,它真的只有做複製、貼上,不會動到原始檔案的任何東西。
  • 本 app 只有在 Windows 10 / Microsoft 365 Excel、Excel 2019 測過,其他 Windows / Excel 版本能應該也能用,如果有問題請到它的專案頁回報。
  • 不含惡意程式,由文創小農獨立手做,天然、有機、無毒、無殘留,如果被防毒程式警告應該是誤判,原碼公開在 GitHub,未來若有新版本也都會發布在 ExcelMerger 的 GitHub 專案頁
至於為什麼要特地寫一支傻瓜 app 幫我們做 CTRL-C、CTRL-V,因為這樣的重複性動作對人類來說太慢也太乏味,又可能貼錯,這種機械性的重複作業正是程式最適合發揮的地方,另一個原因是我們家洪媽媽剛好有這樣的需求,幫家人提高工作效率之餘,也把 app 放出來,希望能援助到其他的地方媽媽。

開發筆記

這支看似簡單的 app 背後卻是用相當不對稱的 Rust + Python + JavaScript 三種語言來實現:
  • JavaScript 負責處理前端介面,前端框架是 Svelte,但幾乎完全沒用到 Svelte 的特性…。
  • Rust 的 Tauri 框架負責把 web 封裝成桌面程式,並且提供存取本機檔案的 API 給 JavaScript。
  • Python 負責後端呼叫 Excel 做開檔、合併、存檔的動作。

Excel 檔案處理

對「讀 Excel 檔案,並且合併」這個核心需求,原本是不考慮 Python 的,但搜尋了幾個 JavaScript 套件,例如 ExcelJS,用的很爽但後來才發現它不支援舊的 xls 檔案…最後試了 SheetJS,但終究因為下面的原因最後還是放棄在 JavaScript 內處理 Excel 檔:
  • SheetJS 不支援儲存格樣式,即便 SheetJS Pro 好像有支援。
  • 在 JS 處理某些舊的 xls 檔會遇到解碼問題,某些陳年的 Delphi / InterBase 程式輸出的 xls 檔案內的文字是 Big5,但在 JavaScript 被錯誤的以 UTF-8 解成亂碼,於是又要多一層調用 iconv-lite 來轉換。
這些問題當然都是走過路過才會遇過的,最終只好把這部分砍掉重練,改用 Python 直接呼叫 Excel,一勞永逸的解決掉解碼和樣式遺漏問題,但副作用就是從此這個 app 只能在 Windows 下使用了,並且用戶得先裝有 Excel,幸好對我們的目標用戶來說,應該九成九的人都滿足這兩點要求。
關於 Python 呼叫 Excel 的部分,可以參考另外一篇〈用 Python 寫 Excel 巨集〉。

前端介面

因為原本天真地以為可以用 JavaScript 就能處理好 Excel 檔案合併的工作,因此用 web 做 UI 再封裝成桌面程式便成了自然而然的選擇,即便後來改用 Python 處理 Excel 檔,然而幾經權衡之下,還是決定沿用 web 做 UI 的方案,除了因為 web UI 的頭已經洗一半,不想全部砍掉重練改用 wxPython 之外,受到公司同事的影響,個人也較偏好 web UI 的方案,布局比傳統 GUI 套件更自由,並且 web 的布局邏輯可以通用到瀏覽器端、桌面端和手機端,是一條可以共用的知識鍊,所以最終還是繼續採用以 web 為基礎的介面。
UX 方面,最初就確立了採用盡可能簡單的拖放式介面,這是受到過往使用某些 macOS app 的啟發,例如 Keka:
一直以來我都被這樣的簡潔吸引著,這是近乎完美的簡潔,有人這樣詮釋完美:
Perfection is achieved not when there is nothing more to add, but when there is nothing left to take away.
所謂完美境界,並非加無可加,而是減無可減。
Antoine de Saint-Exupéry - Ch III: The Tool, Terre des hommes
之前寫過的〈談產品設計的 80/20 法則〉、〈談 POS 設計背後的原則〉也都有一貫的核心思想-盡可能地去除軟體中多餘的部分,減少選擇就是提高效率(在商業上也是如此)。
關於在 web 實現拖放介面的部分,可以參考另外一篇〈Web 處理檔案那些事-上傳篇〉。

封裝成桌面程式

想把 web 封裝成桌面程式,除了 Tauri 外,還有最多人用的 Electron 與 NW.js,最後選擇小眾的 Tauri 的原因是:
  • 使用簡單,Tauri 身為一個 2019 年底才問世的小朋友,相較於兩位大哥哥,它具有更簡單快速上手的特性。
  • 低耦合,Tauri 不綁定 Chromium,它是調用各 OS 自帶的 WebView 做顯示,因此 Tauri 編譯出來的安裝檔都非常小。
  • 還是低耦合,Tauri 底層是 Rust,另外提供一層 JavaScript 的 API 讓程式得以調用本機檔案系統之類的資源,底層的 Rust 也是可抽換的,未來有可能支援 Python / Nim 等其他語言做為底層。
  • 潮。
當然,上面我所看重的特性並不適用於全部的場景,在公司內可能更可能採用成熟又有富爸爸支持的 Electron,像 Tauri 這類還在發展中的工具,就留給我們這個富有實驗精神的文創小農獨立手做,天然、有機、無毒、無殘留的小 app 來用即可。

結語

希望 ExcelMerger 能幫助到有需要的朋友,喜歡的朋友請我幫按讚、訂閱、開啟小鈴鐺,一鍵三連,感恩。
為什麼會看到廣告
13會員
64內容數
Where I go and what I get.
留言0
查看全部
發表第一個留言支持創作者!
Leon的沙龍 的其他內容
圖片來自 Thomas Koukas 這篇主題談的並不是《從 A 到 A+》的什麼廉價低配版,並不是。 之前寫過一篇〈你的程式是資產還是負債?〉,裡面分享了把程式比喻成負資產的危害,以及如何活化資產的幾種方式,這一篇我想延續「資產」的概念,分享我對正資產程式的成長循環的觀點。 即便我們把手中有活躍客
Martin Rue 說:「應用是資產,程式是負債」,因為應用替客戶解決問題而帶來經濟價值,但下面的程式卻是建構應用所必須付出的成本,後續的維護更是持續的成本支出,你同意他的觀點嗎?這裏談談我們對程式是資產或負債的觀點。
終於談到點餐了,這篇拖稿已久的文章談到我們對點餐的概念,怎樣才能兼顧多元化的店家與顧客需求,這裡有我們的解答。
控場是最重要也最花費時間的工作,我們用 prototype 重新整理與歸納桌位的資訊,讓最重要的相關資訊能一目瞭然,以及兼具視覺上的美觀及明確且一致的操作流程。
甘迺迪國際機場的 JFK AirTrain 和設計師 Adam Fisher-Cox 合作重新翻修了告示螢幕,分享這個案例看別的設計師對於個案的思考與流程。
介紹一下 MailPoet 和它的發信設定。
圖片來自 Thomas Koukas 這篇主題談的並不是《從 A 到 A+》的什麼廉價低配版,並不是。 之前寫過一篇〈你的程式是資產還是負債?〉,裡面分享了把程式比喻成負資產的危害,以及如何活化資產的幾種方式,這一篇我想延續「資產」的概念,分享我對正資產程式的成長循環的觀點。 即便我們把手中有活躍客
Martin Rue 說:「應用是資產,程式是負債」,因為應用替客戶解決問題而帶來經濟價值,但下面的程式卻是建構應用所必須付出的成本,後續的維護更是持續的成本支出,你同意他的觀點嗎?這裏談談我們對程式是資產或負債的觀點。
終於談到點餐了,這篇拖稿已久的文章談到我們對點餐的概念,怎樣才能兼顧多元化的店家與顧客需求,這裡有我們的解答。
控場是最重要也最花費時間的工作,我們用 prototype 重新整理與歸納桌位的資訊,讓最重要的相關資訊能一目瞭然,以及兼具視覺上的美觀及明確且一致的操作流程。
甘迺迪國際機場的 JFK AirTrain 和設計師 Adam Fisher-Cox 合作重新翻修了告示螢幕,分享這個案例看別的設計師對於個案的思考與流程。
介紹一下 MailPoet 和它的發信設定。
你可能也想看
Google News 追蹤
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
屬於文創小說,即無論甚麼時候加入觀看,都明其所以。一位特工的故事,他要到泰國捉拿毒販,從小單戀的表姐卻扯上了牽連。
Thumbnail
了解小鈴鐺的困擾 為了了解小鈴鐺對我的方格子交流互動造成的困擾,我特別花了時間將所有訊息列印出來整理。後來發現實在太多了,所以列印範圍只限於最近24小時之內的訊息,總計598筆。裡面有各式各樣的訊息,經過整理後,大約可以分為以下七類: 第一類:喜歡你的(304個) 這類訊息是系統通知你有誰喜歡
Thumbnail
如何解決問題 有朋友問我,我輔導了那麼多廠商,是如何解決他們的問題,讓我的文創會員覺得我很有方法解答他們的疑惑?其實,我並沒有太多太好的方法,而是因為同樣的問題碰到許多次,你就會去思考這個問題是如何產生的,那要怎麼解決?有沒有其他的方案?正反兩面去看問題,漸漸地就會有答案出來。 通常,我反而是回
Thumbnail
美國周三 (4 日) 公布有「小非農」之稱的 ADP 就業報告顯示,9 月美國私營部門就業人數經季節調整後增加 8.9 萬人,創 2021 年 1 月以來新低,遠遠低於經濟學家預期的 15 萬人,也不及修正後前值 18 萬人,該數值自 17.7 萬人上修。該份報告進一步證明美國吃緊的就業市場出現鬆動
Thumbnail
小說介紹 第一章   滿目皆是橘黃色調,帶著一股悠遠的古樸氣息。   藤床上,撫著一頭青絲的手漸漸慢了下來。   不知想到了什麼,帝朦眼眸閃過暗影,忽地挺起身子:「玄兒,你可知創世神永恆存在,不死不滅,唯有相滅才是死期。」   「造主,若是相滅……我和帝清會死?」小帝玄臉白了一陣,他從沒想過有一日自
Thumbnail
▎大山背上的大山北月⛰🌙(撰文by99) 大山北月的前身——豐鄉小學位於新竹縣橫山鄉的大山背,是一所日治時期留下來的廢棄學校。當時就讀清大碩士班的莊凱詠因為課程走進山林,因而看見大山背的問題:偏鄉教育、閒置空間、農產失衡等,於是在畢業以後,他和女友吳宜靜決定好好利用這個特色空間...
Thumbnail
文策院董事長丁曉菁表示,文策院成立至今已收到上千個諮詢案例。 文策院成立以後,來自各方的諮詢紛紛湧入。文策院董事長丁曉菁表示,這一年多來,大概收到上千個諮詢案例,其中又以資金相關問題為大宗。 丁曉菁表示,可能因為從事文化內容產業的人許多都是創作者、比較少經營者,所以前來諮詢的問題,多半跟財稅、融資
Thumbnail
鷗港雖然是間小店,但有著大大的夢想 藏身在民權路上一個不起眼的小店面,甚至沒有招牌 只有可愛的手繪小黑板 12/21的冬日,去拜訪這間朋友開的店。店內只有少少的位子,裡面的人都能自由地聊天、看書,老闆會很熱情招待客人、和客人聊天、向客人介紹不同的咖啡豆。 老屋的骨架,純白色乾淨的內裝
Thumbnail
某一年曾在巴黎瑪黑區漫步,一家古典文具店裡販售傳統書寫用的羽毛筆,沾水筆、 鋼筆、 墨水、皮革筆記本及卡片,包裝上頭印製的是典雅的復古圖樣,我彷彿走進古典的法國學院裡⋯⋯
Thumbnail
如果說渴望被愛是人的天性,那麼不斷地不斷地渴望自己值得被愛則是一種妄想。這部台灣於2018年出版的小說《性感槍手》與其說是作者陶曉嫚作為一種報導文學式對八大行業的考察與紀錄,不如說正反映出台女文化中,典型的「被愛妄想症候群」與愛慕虛榮。
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
屬於文創小說,即無論甚麼時候加入觀看,都明其所以。一位特工的故事,他要到泰國捉拿毒販,從小單戀的表姐卻扯上了牽連。
Thumbnail
了解小鈴鐺的困擾 為了了解小鈴鐺對我的方格子交流互動造成的困擾,我特別花了時間將所有訊息列印出來整理。後來發現實在太多了,所以列印範圍只限於最近24小時之內的訊息,總計598筆。裡面有各式各樣的訊息,經過整理後,大約可以分為以下七類: 第一類:喜歡你的(304個) 這類訊息是系統通知你有誰喜歡
Thumbnail
如何解決問題 有朋友問我,我輔導了那麼多廠商,是如何解決他們的問題,讓我的文創會員覺得我很有方法解答他們的疑惑?其實,我並沒有太多太好的方法,而是因為同樣的問題碰到許多次,你就會去思考這個問題是如何產生的,那要怎麼解決?有沒有其他的方案?正反兩面去看問題,漸漸地就會有答案出來。 通常,我反而是回
Thumbnail
美國周三 (4 日) 公布有「小非農」之稱的 ADP 就業報告顯示,9 月美國私營部門就業人數經季節調整後增加 8.9 萬人,創 2021 年 1 月以來新低,遠遠低於經濟學家預期的 15 萬人,也不及修正後前值 18 萬人,該數值自 17.7 萬人上修。該份報告進一步證明美國吃緊的就業市場出現鬆動
Thumbnail
小說介紹 第一章   滿目皆是橘黃色調,帶著一股悠遠的古樸氣息。   藤床上,撫著一頭青絲的手漸漸慢了下來。   不知想到了什麼,帝朦眼眸閃過暗影,忽地挺起身子:「玄兒,你可知創世神永恆存在,不死不滅,唯有相滅才是死期。」   「造主,若是相滅……我和帝清會死?」小帝玄臉白了一陣,他從沒想過有一日自
Thumbnail
▎大山背上的大山北月⛰🌙(撰文by99) 大山北月的前身——豐鄉小學位於新竹縣橫山鄉的大山背,是一所日治時期留下來的廢棄學校。當時就讀清大碩士班的莊凱詠因為課程走進山林,因而看見大山背的問題:偏鄉教育、閒置空間、農產失衡等,於是在畢業以後,他和女友吳宜靜決定好好利用這個特色空間...
Thumbnail
文策院董事長丁曉菁表示,文策院成立至今已收到上千個諮詢案例。 文策院成立以後,來自各方的諮詢紛紛湧入。文策院董事長丁曉菁表示,這一年多來,大概收到上千個諮詢案例,其中又以資金相關問題為大宗。 丁曉菁表示,可能因為從事文化內容產業的人許多都是創作者、比較少經營者,所以前來諮詢的問題,多半跟財稅、融資
Thumbnail
鷗港雖然是間小店,但有著大大的夢想 藏身在民權路上一個不起眼的小店面,甚至沒有招牌 只有可愛的手繪小黑板 12/21的冬日,去拜訪這間朋友開的店。店內只有少少的位子,裡面的人都能自由地聊天、看書,老闆會很熱情招待客人、和客人聊天、向客人介紹不同的咖啡豆。 老屋的骨架,純白色乾淨的內裝
Thumbnail
某一年曾在巴黎瑪黑區漫步,一家古典文具店裡販售傳統書寫用的羽毛筆,沾水筆、 鋼筆、 墨水、皮革筆記本及卡片,包裝上頭印製的是典雅的復古圖樣,我彷彿走進古典的法國學院裡⋯⋯
Thumbnail
如果說渴望被愛是人的天性,那麼不斷地不斷地渴望自己值得被愛則是一種妄想。這部台灣於2018年出版的小說《性感槍手》與其說是作者陶曉嫚作為一種報導文學式對八大行業的考察與紀錄,不如說正反映出台女文化中,典型的「被愛妄想症候群」與愛慕虛榮。