HOWTO · Python
如何在 Python 中寫入 Excel 試算表
學習使用 pandas 和 openpyxl 在 Python 中將表格資料與儲存格寫入 .xlsx 活頁簿,並驗證匯出的檔案。
本頁內容
Python 可以從 pandas 的 DataFrame 建立 Excel 活頁簿,也可以用 openpyxl 直接設定儲存格。表格使用 pandas,直接控制使用 openpyxl,新建格式豐富的活頁簿使用 XlsxWriter。
使用 pandas 將 DataFrame 寫入 .xlsx 檔案
pandas 的 DataFrame.to_excel() 會建立 .xlsx 檔案、寫入列欄並允許指定工作表名稱。
以下範例寫入表格後重新讀取進行驗證。執行前請安裝 pandas 和 openpyxl。
import pandas as pd
sales = pd.DataFrame({"Product": ["Notebook", "Pen"], "Units": [3, 8]})
sales.to_excel("sales.xlsx", sheet_name="Sales", index=False)
saved = pd.read_excel("sales.xlsx", sheet_name="Sales")
print(saved.to_dict(orient="records"))
輸出包含 Notebook 和 Pen。索引不是資料欄時使用 index=False,並確保輸入清單長度相同。
使用 ExcelWriter 寫入多個工作表
pd.ExcelWriter 可以把多個 DataFrame 寫入同一個活頁簿。為每張表指定不同的 sheet_name,並讓上下文管理器關閉 writer。
import pandas as pd
sales = pd.DataFrame({"Product": ["Notebook", "Pen"], "Units": [3, 8]})
returns = pd.DataFrame({"Product": ["Pen"], "Units": [1]})
with pd.ExcelWriter("report.xlsx", engine="openpyxl") as writer:
sales.to_excel(writer, sheet_name="Sales", index=False)
returns.to_excel(writer, sheet_name="Returns", index=False)
print(pd.ExcelFile("report.xlsx").sheet_names)
輸出包含 Sales 和 Returns。上下文管理器可以避免忘記關閉 writer。
使用 openpyxl 寫入儲存格
輸入不是 DataFrame,或需要直接操作工作表與儲存格時使用 openpyxl。設定值、附加資料列,並在完成後儲存。
from openpyxl import Workbook, load_workbook
workbook = Workbook()
sheet = workbook.active
sheet.title = "Summary"
sheet["A1"] = "Product"
sheet["B1"] = "Units"
sheet.append(["Notebook", 3])
workbook.save("summary.xlsx")
saved = load_workbook("summary.xlsx", data_only=True)
print(saved["Summary"]["A2"].value, saved["Summary"]["B2"].value)
輸出為 Notebook 3。需要數字位置時也可以使用 cell(row, column)。
選擇 pandas、openpyxl 或 XlsxWriter
表格匯出選擇 pandas;編輯現有活頁簿以及操作儲存格、公式和工作表選擇 openpyxl。兩者都能產生 .xlsx。
XlsxWriter 適合新建並格式化活頁簿。只有明確要求舊 .xls 時才使用 xlwt。
請讓副檔名、函式庫和引擎保持一致;writer 關閉後不能繼續編輯。
驗證活頁簿並處理常見失敗
寫入後檢查路徑存在且活頁簿可以開啟。缺少輸出通常表示未執行、儲存前失敗,或使用了其他工作目錄。
from pathlib import Path
output = Path("missing.xlsx")
if not output.exists():
raise FileNotFoundError(f"Expected export was not created: {output}")
print(output.suffix, output.stat().st_size > 0)
這個邊界檢查會在建立 missing.xlsx 前引發 FileNotFoundError。自動化流程也應檢查工作表名稱和儲存格值。