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。自動化流程也應檢查工作表名稱和儲存格值。