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。自动化流程还应检查工作表名称和单元格值。