🧾新手也能懂的 Excel 批次合併:用 Python 一鍵把多個檔案變成一個活頁簿(每檔一張工作表)
1) 這篇文章要解決什麼問題?
你的同事寄了十幾個甚至幾百個 Excel
報表,你想「把它們合成一個檔案」、每個來源檔變成同一本活頁簿中的一張工作表。手動複製貼上很花時間,而且容易出錯。
我們要做的是:用一支小工具,自動化完成這件事。
2) 需要準備什麼(環境與觀念)
-
Python 3.9+(或相近版本)
-
套件:
pandas(資料處理)、openpyxl(寫出 .xlsx)-
如果要讀更舊的
.xls,可另外裝xlrd -
如果要讀
.xlsb,可另外裝pyxlsb
-
-
基本觀念:
-
資料夾:把要合併的 Excel 檔放在同一個資料夾。
-
工作表名稱限制(Excel):不可含
[]:*?/ \,最多 31 個字,且同一本活頁簿中不可重複。
-
安裝套件(命令列):
3) 流程概覽:電腦到底會做哪些事?
-
找到資料夾中的 Excel 檔(可用萬用字元過濾,如
*.xlsx)。 -
替每個檔決定要讀哪張工作表(第一張,或指定名稱)。
-
清理工作表名稱(符號/長度/重名)。
-
寫入同一本輸出活頁簿(每個來源檔→一張工作表)。
-
(選配)封存已處理過的來源檔到
archive之類的資料夾。 -
寫一頁 INFO 做紀錄:合併時間、來源資料夾、檔案數量。
4) 完整示範(安全改寫版):批次合併 Excel(每檔→一張工作表)
下列程式碼為重新撰寫的教學示範,非你提供的原始碼;可直接使用或依需求調整。
如何執行(範例)
5) 常見錯誤與排除
-
讀不到
.xlsx
→ 沒裝openpyxl。執行:pip install openpyxl -
要讀
.xls舊檔
→ 安裝:pip install xlrd(注意新版本僅支援.xls) -
要讀
.xlsb
→ 安裝:pip install pyxlsb -
工作表名稱錯誤(含非法字元或超長)
→ 程式裡有clean_sheet_title自動處理;若你自行改寫,務必保留這段邏輯。 -
輸出檔被鎖定(有人開著 Excel)
→ 請關閉目標輸出檔,再重跑。 -
讀到
~$開頭的暫存檔
→ 示範程式已自動排除;如仍遇到,請關閉相關 Excel 視窗。 -
記憶體不足(一次載入超大表)
→ 嘗試只選必需欄位usecols=,或拆檔分批處理,再合併。
6) 進階加值做法
-
把多個工作表「縱向合併」成同一張表:
目前示範是「一檔一表」。若要改為「把內容接在一起」,可以:讀入後all_frames.append(df.assign(Source=f.name)),最後pd.concat(all_frames)寫成單一工作表。 -
同時支援 CSV/TSV
若資料來源有 CSV,偵測副檔名後改用pd.read_csv(),也能整批納入。 -
自動欄寬/樣式
寫檔時改用engine="xlsxwriter"可做更多格式化(但讀入仍用對應引擎)。 -
只封存成功寫入者
現在示範是處理完就封存全部來源檔。若你偏好只搬成功者,可在迴圈中記錄「成功清單」,封存時只處理那些檔案。
7) 常見問答(FAQ)
Q:我不會寫程式,可以用嗎?
A:可以。照著「如何執行」的範例把參數替換成你的路徑即可。遇到錯誤訊息,對照「常見錯誤與排除」逐項檢查。
Q:檔名有中文、工作表也有中文可以嗎?
A:可以。程式會統一用 UTF-8 記錄,工作表名也會自動清理非法字元並避免重名。
Q:可以同時抓多個特定檔名規則嗎?
A:可以多跑幾次、或修改
--filter(例如先合併
*_A.xlsx,再合併
*_B.xlsx 到不同輸出)。
Q:輸出的活頁簿太大怎麼辦?
A:考慮:
-
分次輸出多本活頁簿(依月份/專案拆分)
-
僅選必要欄位或先壓縮檔案內容
-
用 CSV/資料庫管線處理巨量資料
8) 結語
對辦公室日常來說,「把 N 份 Excel 合成 1 份」是高頻需求。把這件事自動化,能省下大量重複勞動並降低手動錯誤。本文用白話流程與安全改寫的程式示範帶你完成從零到一的批次合併;之後你也能漸進式加入「縱向合併、CSV 支援、格式化、封存策略」等進階功能,打造更貼近團隊日常的資料整合小工具。
留言
張貼留言