Excel 多檔合併教學:用 xlwings 一次整合 10 份報表

更新 發佈閱讀 13 分鐘

連假回來,10 份 Excel 報表一次合併的實戰紀錄

連假回來,我發現累積了 10 天的報表需要處理。

問題很單純:

我該怎麼把 10 份格式完全相同的 Excel 報表,一次性抓到同一份 Excel 裡?

於是,我決定和 AI 協作完成這件事。

第一回合:我給 AI 的原始 Prompt

我一開始是這樣描述需求的:

我現在手邊有 10 份檔案,每份檔案我想要找分頁叫做「OOO銀行資料」,

但每頁我想要找第九列開始的資料,把它們都貼在同一份 Excel 裡面, 他們的表頭都相同,可以幫我用 Jupyter Notebook 完成嗎?

Gemini 回答:「沒問題!」

它給了我一套用 pandas + glob + os 遍歷資料夾、讀取分頁、合併 DataFrame 的腳本,理論上,非常合理。

然後我就掉進無限錯誤迴圈.....

錯誤訊息長這樣:

❌ 處理 OOO銀行資料_20260213.xlsx 時仍發生錯誤: expected <class 'float'>
❌ 處理 OOO銀行資料_20260214.xlsx 時仍發生錯誤: expected <class 'float'>
❌ 處理 OOO銀行資料_20260215.xlsx 時仍發生錯誤: expected <class 'float'>
...

AI 告訴我:

openpyxl 無法正確解析這些報表的資料型態,導致卡在 float 錯誤裡。

於是它建議換引擎:pyxlsb

再錯。

再換方法。

再錯。

我正式進入 「AI 很努力,但問題根本沒被解決」 的循環。

第 N 次錯誤後,我重新思考問題

我突然想到一件事:

把大象放進冰箱要幾個步驟?

我的任務其實是:

  1. 打開檔案
  2. 複製第二個工作表
  3. 貼到新的 Excel

而不是:

把 Excel 解析成完美 DataFrame 再進行數據結構轉換

我開始意識到——問題不是 AI 寫不出程式,問題是:我把「動作需求」錯誤轉換成了「資料分析需求」。

為什麼 pandas 一直出錯?

因為 pandas.read_excel() 的本質是:

👉 把 Excel 轉換成標準化的 DataFrame。

這意味著它會:

  • 嘗試推斷欄位型別(float、datetime、int)
  • 處理空白值
  • 解讀隱藏格式
  • 套用 Engine(openpyxl / calamine / pyxlsb)

但我的報表內部格式可能有:

  • 空白儲存格
  • 格式殘留
  • 錯誤的數字標籤
  • Excel 內部奇怪的 metadata

於是它一直報:

expected <class 'float'>

我甚至嘗試:

dtype=str

關鍵轉折:不要「讀資料」,改成「操作 Excel」

我後來搜尋到一個工具: xlwings

這個工具的邏輯完全不同,它不是去解讀 Excel 的底層格式,而是直接呼叫電腦裡的 Excel 軟體,並來操控Excel!所以我開始測試:

import xlwings as xw
workbook = xw.Book()

Excel 視窗真的跳出一個全新的excel!ヽ(≧∀≦)ノ
那一刻我知道——這條路對了。

技術理解整理:三種不同層級的工具

1. pandas 是「圖書館 (Library)」沒錯

在程式世界裡,pandas 被稱為 Library,可以把它想像成一座「數據處理自動化圖書館。這座圖書館不只藏書,它還提供一套標準化的作業流程(例如:怎麼借書、怎麼還書、怎麼把書裡面的資料填進表格)。

2. 核心任務:read_excel 出借工具的服務 (Function)

這是使用者走進圖書館最主要的目的,它的任務是:「把雜亂的原始檔案,轉化成整齊的圖書館標準格式(DataFrame)。」當我用python寫下:

read_excel()

其實是在下達一個複雜的綜合指令:

  • 辨識格式:確認這是一本 .xlsx、.xls 還是 .xlsb 的書。
  • 指派工人 (Engine):根據你的要求(或圖書館預設),指派 openpyxl / calamine / pyxlsb 去拆解書本。
  • 數位化錄入:將資料轉為 DataFrame!把拆解出來的資料,一列一列、一欄一欄地填進 pandas 那張著名的「超級大表格 (DataFrame)」裡。
  • 最終產出標準化資料型別:服務結束後,你手上就會拿到一份完全標準化、可以立刻進行加減乘除或繪圖的數據,而不需要再去管原始 Excel 長什麼樣子。

3. openpyxlpyxlsbCalamine 是「後勤轉檔機」

這些不是圖書館裡的普通工具,它們像是圖書館後勤室裡的「格式轉換引擎 (Engines)」,想像一下,Excel 檔案(.xlsx)就像是用一種加密方言寫成的古籍,圖書館員(pandas)看不懂。現在現在是圖書館後勤室有四位主要成員了:

raw-image

3-2. 特別介紹:xlwings —— 遠端遙控機器手臂

為什麼說 xlwings機器手臂

  • 它的原理:其他的引擎(如 Calamine)是直接去解讀檔案的二進制代碼;而 xlwings 則是打開電腦上裝的 Excel 程式,像有一隻隱形的雙手操作 Excel。
  • 優勢:若使用的Excel 檔案裡有複雜的 VBA 巨集特殊的公式,或者是那種需要「活生生」開著 Excel 才能抓到的數據,xlwings 就是唯一的救星。
  • 缺點:因為它必須啟動整個 Excel 軟體,所以它是所有方法中最慢、最耗資源的。

4. 總結任務流程,改用 xlwings:

  1. 將所有檔案放入同一資料夾
  2. 用程式打開每一個檔案
  3. 複製第二個工作表
  4. 貼到新的合併檔案
  5. 存檔

沒有解析 DataFrame、沒有處理型別推斷、沒有 dtype 戰爭。

單純複製,任務完成!

實際解決的流程

(1) 先安裝xlwing

pip install xlwings
raw-image

(2) 測試將資料試著跑跑看,打開一個新的excel檔案

#匯入 xlwings套件
import xlwings as wx
#讓 xlwings 開啟一個新的excel檔案
workbook = wx.Book()

(3)測試將資料試著跑跑看,打開一個既有的excel檔案

import xlwings as wx 
import os
# 定義檔案
file_path = r'C:\Users\c\Downloads\CCP-0213-22\OOOO明細_20260222.xlsx'
# 檢查檔案是否存在 (預防路徑打錯報錯)
if os.path.exists(file_path):
# 打開指定的 Excel 檔案
workbook = wx.Book(file_path)
print("檔案已成功開啟!")
else:
print("找不到檔案,請檢查路徑或檔名是否正確。")

(4)將資料全部放到同一個檔案夾內,盡量以英文命名資料夾 (中文會有全形半形的問題)

raw-image

(5)在VS code裡面使用下列的code

  • 右上角 1 按下去是運算,但按下去之前記得游標移動到 2 要先ctrl + s 存檔案 (存成.py)
  • 最後可以在 terminal 也就是3的地方看到有沒有在跑
raw-image


import xlwings as xw
import os

# 1. 設定路徑
folder_path = r'C:\Users\cynthia.hsu\Downloads\CCP-0213-22'
output_name = "全部日報合併檔.xlsx"
output_path = os.path.join(folder_path, output_name)

# 取得資料夾內所有檔案清單,過濾出 .xlsx 且排除 ~$ 開頭的暫存檔
all_files = [f for f in os.listdir(folder_path)
if f.endswith('.xlsx') and not f.startswith('~$') and f != output_name]

print(f"預計處理 {len(all_files)} 個檔案...")

# 2. 啟動 Excel
app = xw.App(visible=False, add_book=False)
app.display_alerts = False

try:
# 建立一個新的空白活頁簿作為容器
combined_wb = app.books.add()

for file_name in all_files:
file_path = os.path.join(folder_path, file_name)
print(f"正在提取: {file_name} ...")

try:
# 開啟原始檔
source_wb = app.books.open(file_path)

# 檢查是否有第二個工作表 (索引 1)
if len(source_wb.sheets) >= 2:
source_sheet = source_wb.sheets[1]

# 幫 Sheet 取個名字(取檔名的後 8 碼日期,避免重複)
new_name = file_name.replace(".xlsx", "")[-8:]

# 複製整張 Sheet 到新檔案的最前面
source_sheet.copy(before=combined_wb.sheets[0], name=f"明細_{new_name}")
print(f" --> ✅ 已成功加入 [明細_{new_name}]")
else:
print(f" --> ⚠️ 跳過:此檔案沒有第二個工作表")

source_wb.close()

except Exception as e:
print(f" --> ❌ 處理 {file_name} 時出錯: {e}")

# 3. 刪除新檔案建立時預設的 "Sheet1"
try:
if len(combined_wb.sheets) > 1:
combined_wb.sheets['Sheet1'].delete()
except:
pass

# 4. 儲存結果
combined_wb.save(output_path)
combined_wb.close()
print(f"\n--- 任務完成!共合併 {len(all_files)} 個檔案 ---")
print(f"儲存路徑: {output_path}")

except Exception as e:
print(f"發生嚴重錯誤: {e}")

finally:
app.quit()

這次我學到的「與 AI 協作」關鍵

❌ AI 不是問題拆解者
✅ 人類才是問題定義者

如果我把問題定義錯誤,AI 會非常努力地在錯誤方向優化,但卻永遠解不開問題,到不了終點....

當問題被定義錯誤,AI 只會在錯的方向上不斷優化....
看起來很努力,卻永遠到不了終點。

因為再強的模型,也救不了錯誤的框架,
工具只是放大器,人類才是方向盤。

與 AI 協作,真正重要的從來不是 Prompt 技巧,
而是——你是否看清楚問題的本質。

留言
avatar-img
拾光日誌|牧牧的沙龍
22會員
48內容數
living a vivid life wholeheartedly 讀萬卷書、行萬里路、見眾生、見自己
2025/11/02
在數據分析的世界裡,第一步往往不是模型或報表,而是如何整理那堆凌亂的 Excel。這篇文章分享我如何用 Power Query把重複的工作變成「一鍵完成」的流程,讓報表不再是苦差事,而是自動化的享受。
Thumbnail
2025/11/02
在數據分析的世界裡,第一步往往不是模型或報表,而是如何整理那堆凌亂的 Excel。這篇文章分享我如何用 Power Query把重複的工作變成「一鍵完成」的流程,讓報表不再是苦差事,而是自動化的享受。
Thumbnail
2025/10/15
不會寫程式也能自動化!教你用 Google Sheet 搭配 Google App Script,打造一鍵寄信與報表自動化流程。從需求收斂模板、指派按鈕到錯誤排除,完整教學讓你輕鬆召喚辦公小機器人,告別重複瑣事!
Thumbnail
2025/10/15
不會寫程式也能自動化!教你用 Google Sheet 搭配 Google App Script,打造一鍵寄信與報表自動化流程。從需求收斂模板、指派按鈕到錯誤排除,完整教學讓你輕鬆召喚辦公小機器人,告別重複瑣事!
Thumbnail
2025/07/08
分享利用 Google Apps Script 打造 Gmail 自動化監測工具,監控系統通知信件是否漏寄。透過簡單的腳本設置,即使是程式麻瓜也能輕鬆將動化記錄email資料至 Google Sheet。希望能讓更多人,即使是程式初學者,也能親身感受到 AI 與程式自動化所帶來的無限魅力與便利。
Thumbnail
2025/07/08
分享利用 Google Apps Script 打造 Gmail 自動化監測工具,監控系統通知信件是否漏寄。透過簡單的腳本設置,即使是程式麻瓜也能輕鬆將動化記錄email資料至 Google Sheet。希望能讓更多人,即使是程式初學者,也能親身感受到 AI 與程式自動化所帶來的無限魅力與便利。
Thumbnail
看更多
你可能也想看
Thumbnail
vocus 慶祝推出 App,舉辦 2026 全站慶。推出精選內容與數位商品折扣,訂單免費與紅包抽獎、新註冊會員專屬活動、Boba Boost 贊助抽紅包,以及全站徵文,並邀請你一起來回顧過去的一年, vocus 與創作者共同留下了哪些精彩創作。
Thumbnail
vocus 慶祝推出 App,舉辦 2026 全站慶。推出精選內容與數位商品折扣,訂單免費與紅包抽獎、新註冊會員專屬活動、Boba Boost 贊助抽紅包,以及全站徵文,並邀請你一起來回顧過去的一年, vocus 與創作者共同留下了哪些精彩創作。
Thumbnail
作者分享個人成長、療癒歷程,以及如何從2026年開始,以「Being in the Art Scene」為題,透過英文書寫記錄自己逐步走進藝術現場的過程。這是一個關於累積、感受、轉變與自我對話的系列,旨在探索作者如何從觀看者轉變為能理解與轉譯藝術的參與者。
Thumbnail
作者分享個人成長、療癒歷程,以及如何從2026年開始,以「Being in the Art Scene」為題,透過英文書寫記錄自己逐步走進藝術現場的過程。這是一個關於累積、感受、轉變與自我對話的系列,旨在探索作者如何從觀看者轉變為能理解與轉譯藝術的參與者。
Thumbnail
在2026年2月17日的水瓶座新月日蝕下,透過簡單的冥想與儀式,放下舊有循環,更新生命藍圖,並為未來的循環播下新的種子,啟動新的時間線。文章提供新月冥想引導、簡易儀式步驟、肯定語,並推薦使用的精油,以及結合玉清元始天尊聖誕的象徵意義。
Thumbnail
在2026年2月17日的水瓶座新月日蝕下,透過簡單的冥想與儀式,放下舊有循環,更新生命藍圖,並為未來的循環播下新的種子,啟動新的時間線。文章提供新月冥想引導、簡易儀式步驟、肯定語,並推薦使用的精油,以及結合玉清元始天尊聖誕的象徵意義。
Thumbnail
2026 丙午火馬年,是「真實之年」,一個高頻顯化與頻率塑造的關鍵年份。 因雙重火能疊加,能量傳導不再有延遲,而是“即刻反應”。 今年能量是一把不分青紅皂白的放大鏡,你發出什麼,就會被放大。 意圖來自小我:燃燒自我,或失控爆炸。 意圖來自靈魂:內在對齊,就升級顯化。
Thumbnail
2026 丙午火馬年,是「真實之年」,一個高頻顯化與頻率塑造的關鍵年份。 因雙重火能疊加,能量傳導不再有延遲,而是“即刻反應”。 今年能量是一把不分青紅皂白的放大鏡,你發出什麼,就會被放大。 意圖來自小我:燃燒自我,或失控爆炸。 意圖來自靈魂:內在對齊,就升級顯化。
Thumbnail
總是覺得自己無法完成計畫,感到無力又自責嗎?本文將引導你瞭解大腦的「網狀活化系統」與「心理一致性」概念,解析為何目標難以達成的原因,並提供一個全新的方法,從追求「結果」轉變為聚焦「身份」,幫助你找回內在動力,真正實踐願望,成為自己相信的人。
Thumbnail
總是覺得自己無法完成計畫,感到無力又自責嗎?本文將引導你瞭解大腦的「網狀活化系統」與「心理一致性」概念,解析為何目標難以達成的原因,並提供一個全新的方法,從追求「結果」轉變為聚焦「身份」,幫助你找回內在動力,真正實踐願望,成為自己相信的人。
Thumbnail
在新的一年,作者透過奧修禪卡「時機成熟」牌,獲得2026年的心靈指引。文章分享如何透過活在當下、累積能量與智慧,為自己創造安定、自在、舒服的生活。鼓勵讀者檢視自身成長,迎接豐盛的收穫,並分享《30day愛自己的小練習》為愛自己打下的基礎。
Thumbnail
在新的一年,作者透過奧修禪卡「時機成熟」牌,獲得2026年的心靈指引。文章分享如何透過活在當下、累積能量與智慧,為自己創造安定、自在、舒服的生活。鼓勵讀者檢視自身成長,迎接豐盛的收穫,並分享《30day愛自己的小練習》為愛自己打下的基礎。
Thumbnail
新的一年,我們都需要一些指引。這篇文章從奧修禪卡「時機成熟」牌卡出發,探討如何找到安定、自在與舒服的生活節奏。文章解析牌義,強調真正的富足來自內在的滿足與信任生命的歷程,而非外在的強求。透過五個「愛自己小練習」,引導讀者學會接納當下、溫柔對待自己,活出成熟、豐盛的人生。
Thumbnail
新的一年,我們都需要一些指引。這篇文章從奧修禪卡「時機成熟」牌卡出發,探討如何找到安定、自在與舒服的生活節奏。文章解析牌義,強調真正的富足來自內在的滿足與信任生命的歷程,而非外在的強求。透過五個「愛自己小練習」,引導讀者學會接納當下、溫柔對待自己,活出成熟、豐盛的人生。
Thumbnail
本文從摩根·豪瑟的觀點出發,探討「如何花錢」的藝術,而非僅關注「如何賺錢」。強調個人幸福標準的多樣性,以及理性消費、專注實用性、拒絕虛榮的重要性。文章也指出儲蓄能帶來時間掌控權和心理穩定,並鼓勵透過小額實驗來探索適合自己的花錢方式,最終發現利他與貢獻是獲得最高幸福感的途徑。
Thumbnail
本文從摩根·豪瑟的觀點出發,探討「如何花錢」的藝術,而非僅關注「如何賺錢」。強調個人幸福標準的多樣性,以及理性消費、專注實用性、拒絕虛榮的重要性。文章也指出儲蓄能帶來時間掌控權和心理穩定,並鼓勵透過小額實驗來探索適合自己的花錢方式,最終發現利他與貢獻是獲得最高幸福感的途徑。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News