Python Excel 自动化:5 个 openpyxl 替代方案

openpyxl 是处理现代 Excel 文件时一个成熟且可靠的选择,可用于读取、创建和修改 .xlsx 工作簿。

不过,不同的 Excel 自动化场景往往需要不同的工具。例如,数据分析、格式化报表生成、桌面版 Excel 自动化以及工作簿格式转换等任务,未必适合完全依赖 openpyxl。

例如,openpyxl 本身不会计算公式。如果工作簿中包含其不支持的对象,在打开并重新保存文件后,这些对象还可能丢失。

本文将介绍并比较以下 5 个实用的 openpyxl 替代方案:

  • XlsxWriter
  • pandas
  • xlwings
  • Free Spire.XLS for Python
  • pyexcel

这些库不按优劣进行排名,因为它们分别适用于不同的工作流程。选择哪一个,主要取决于你的实际需求。

5 个 Python Excel 库快速对比

最适合的场景 是否能读取现有文件 是否需要安装 Microsoft Excel 主要局限
XlsxWriter 从零创建格式精美的 Excel 报表 无法修改现有工作簿
pandas 清洗、分析和导出表格数据 对工作簿级功能的控制有限
xlwings 自动化控制真实的 Excel 应用程序 桌面自动化通常需要 不适合 Linux 服务器或容器环境
Free Spire.XLS for Python 工作簿处理和格式转换 使用专有 API,免费版处理 .xls 文件时存在限制
pyexcel 简单、跨格式的数据导入与导出 通过插件支持 不侧重格式设计和工作簿保真度

1. XlsxWriter:最适合生成新的 Excel 报表

当目标是创建一个新的 .xlsx 文件,而不是编辑已有工作簿时,XlsxWriter 通常是最直接、清晰的选择。

它支持以下功能:

  • 单元格格式
  • Excel 公式
  • 图表
  • 条件格式
  • 数据验证
  • 合并单元格
  • 图片
  • 批注
  • 富文本
  • 内存优化写入

XlsxWriter 还可以很好地与 pandas 和 Polars 配合使用。

安装

可以通过 PyPI 安装 XlsxWriter:

pip install XlsxWriter

下面是一个生成格式化销售报表的基础示例:

import xlsxwriter

# 创建新的工作簿,并添加一个工作表
workbook = xlsxwriter.Workbook("sales_report.xlsx")
worksheet = workbook.add_worksheet("Summary")

# 定义可复用的表头格式和货币格式
header_format = workbook.add_format({
    "bold": True,
    "bg_color": "#D9EAF7",
    "border": 1,
})

currency_format = workbook.add_format({
    "num_format": "$#,##0.00",
})

# 写入表头
worksheet.write_row(
    "A1",
    ["Product", "Units", "Revenue"],
    header_format,
)

# 准备要写入工作表的数据
rows = [
    ["Keyboard", 25, 1249.75],
    ["Monitor", 10, 2899.90],
    ["Mouse", 40, 799.60],
]

# 逐行写入数据,并将收入列设置为货币格式
for row_index, row in enumerate(rows, start=1):
    worksheet.write(row_index, 0, row[0])
    worksheet.write_number(row_index, 1, row[1])
    worksheet.write_number(
        row_index,
        2,
        row[2],
        currency_format,
    )

# 调整列宽,提高可读性
worksheet.set_column("A:A", 18)
worksheet.set_column("B:C", 12)

# 关闭工作簿,完成文件写入
workbook.close()

XlsxWriter 的 API 比较明确。当工作簿的视觉效果较为重要时,这种设计尤其方便。

格式设置代码通常紧挨着对应的单元格写入逻辑,生成文件时也不需要安装 Microsoft Excel。

XlsxWriter 适合哪些场景

XlsxWriter 适合用于:

  • 财务报表和运营报表
  • 仪表盘式工作簿
  • 需要控制内存占用的大规模数据导出
  • 包含图表、条件格式或下拉验证列表的文件
  • 需要进一步美化的 pandas Excel 导出结果

XlsxWriter 不适合哪些场景

XlsxWriter 是一个只写库,不能打开已有工作簿并修改其中的少量单元格,同时保留文件中的其他内容。

对于基于 Excel 模板的工作流程,openpyxl、xlwings 或 Free Spire.XLS 通常更加合适。

2. pandas:最适合以数据为中心的 Excel 处理

pandas 并不是一个完整的 Excel 对象模型库。它主要将 Excel 视为表格数据的输入和输出格式。

这种定位在很多场景下反而更加实用。

当主要任务是筛选记录、连接多个数据集、计算汇总结果、处理缺失值或重塑表格结构时,通常没有必要逐个操作 Excel 单元格。

安装

可以同时安装 pandas、Excel 读取引擎和写入引擎:

pip install pandas python-calamine XlsxWriter

在这个组合中:

  • pandas 负责数据转换和分析。
  • python-calamine 负责读取 Excel 文件。
  • XlsxWriter 负责生成输出工作簿。
import pandas as pd

# 使用 Calamine 引擎读取源工作簿
orders = pd.read_excel(
    "orders.xlsx",
    engine="calamine",
)

# 删除数据不完整的记录,然后按区域分组,
# 计算总收入和订单数量
summary = (
    orders
    .dropna(subset=["Region", "Revenue"])
    .groupby("Region", as_index=False)
    .agg(
        Total_Revenue=("Revenue", "sum"),
        Order_Count=("Order_ID", "count"),
    )
    .sort_values("Total_Revenue", ascending=False)
)

# 将处理后的数据写入新的 Excel 工作簿
with pd.ExcelWriter(
    "regional_summary.xlsx",
    engine="xlsxwriter",
) as writer:
    summary.to_excel(
        writer,
        sheet_name="Regional Summary",
        index=False,
    )

    # 获取底层的 XlsxWriter 工作表对象,
    # 进一步调整输出样式
    worksheet = writer.sheets["Regional Summary"]
    worksheet.set_column("A:A", 20)
    worksheet.set_column("B:C", 16)

pandas 可以通过 ExcelWriter 将一个或多个 DataFrame 写入不同的工作表。

在生成 .xlsx 文件时,pandas 可以在底层使用 openpyxl、XlsxWriter 等引擎。

因此,pandas 在很多时候并不是完全替代某个 Excel 库,而是与其他 Excel 库配合使用。

pandas 适合哪些场景

pandas 适合用于:

  • Excel 只是数据处理流程中的输入或输出格式
  • 核心工作是筛选、分组、合并或聚合数据
  • 数据正确性比工作簿格式更重要
  • 数据来源还包括 CSV、SQL、JSON 或 API

pandas 不适合哪些场景

pandas 并不是为了完整保留现有 Excel 文件中的所有功能而设计的。

它也不适合精细控制以下内容:

  • 图表
  • 图形和形状
  • 命名区域
  • 打印设置
  • 复杂单元格样式
  • 工作簿级对象

如果需要生成格式精美的输出文件,常见做法是先使用 pandas 处理数据,再使用 XlsxWriter 或 openpyxl 完成展示层的格式设计。

3. xlwings:最适合自动化控制真实的 Excel 应用程序

有些 Excel 工作流程必须依赖 Excel 应用程序本身。

例如,工作簿中可能包含以下内容:

  • 需要重新计算的公式
  • 外部链接
  • VBA 宏
  • Power Query 连接
  • 依赖 Excel 特有行为的功能

这些内容通常无法由文件级处理库完整、可靠地模拟。

在这种情况下,直接自动化控制已安装的 Excel 应用程序,往往比直接修改工作簿文件更加稳妥。

开源版 xlwings 可以在 Windows 和 macOS 上连接桌面版 Excel。它能够打开工作簿、更新单元格区域、调用宏、触发公式计算,并访问 Excel 的对象模型。

安装

使用 pip 安装 xlwings:

pip install xlwings

使用 xlwings 进行桌面自动化时,目标计算机通常需要安装 Microsoft Excel。

import xlwings as xw

# 在后台启动 Excel,不创建空白工作簿
app = xw.App(
    visible=False,
    add_book=False,
)

workbook = None

try:
    # 打开已有的 Excel 模型
    workbook = app.books.open("forecast_model.xlsx")

    # 更新输入参数
    inputs = workbook.sheets["Inputs"]
    inputs["B2"].value = 0.08
    inputs["B3"].value = 125000

    # 让 Excel 重新计算工作簿中的公式
    app.calculate()

    # 从另一个工作表读取公式计算结果
    result = workbook.sheets["Summary"]["D10"].value
    print(f"计算后的预测结果:{result}")

    # 将更新后的工作簿保存为新文件
    workbook.save("forecast_model_updated.xlsx")
finally:
    # 即使发生异常,也关闭工作簿和 Excel
    if workbook is not None:
        workbook.close()

    app.quit()

由于公式计算由 Excel 本身完成,因此,当公式、外部链接、宏或工作簿行为需要与用户在桌面版 Excel 中看到的结果保持一致时,这种方式非常实用。

xlwings 适合哪些场景

xlwings 适合用于:

  • 替代或扩展 VBA 自动化
  • 更新复杂的财务模型
  • 在读取结果前运行 Excel 公式计算
  • 自动化依赖 Excel 特有行为的工作簿
  • 构建由 Python 驱动的宏或 Excel 加载项

xlwings 不适合哪些场景

桌面版 xlwings 通常不适合:

  • Docker 容器
  • Linux 服务器
  • 高并发 Web 服务
  • 无桌面环境的后台任务

启动并控制 Excel 应用程序,也会比直接读取 .xlsx 文件带来更多部署和运维成本。

对于无人值守的服务端文件生成任务,XlsxWriter、openpyxl、pandas 或独立的文档处理库通常更容易部署。

4. Free Spire.XLS for Python:最适合多格式处理和文件转换

Free Spire.XLS for Python 更偏向于以“文档”为中心处理电子表格。

它无需安装 Microsoft Office,就可以创建、读取、编辑和转换 Excel 工作簿。

除了传统的 .xls 文件外,它还支持:

  • .xlsx
  • .xlsm
  • .xlsb
  • .ods

其 API 还覆盖以下功能:

  • 公式
  • 图表
  • 数据透视表
  • 条件格式
  • 数据验证
  • 工作表保护
  • 文档格式转换

安装

可以通过 PyPI 安装免费版本:

pip install Spire.Xls.Free

下面是一个修改现有工作簿的简单示例:

from spire.xls import Workbook, FileFormat

# 创建工作簿对象
workbook = Workbook()

try:
    # 从磁盘加载已有工作簿
    workbook.LoadFromFile("monthly_report.xlsx")

    # 获取第一个工作表
    worksheet = workbook.Worksheets[0]

    # 修改工作表中的两个单元格
    worksheet.Range["A1"].Value = "更新后的月度报告"
    worksheet.Range["B2"].Value = "已审核"

    # 将修改后的工作簿保存为 XLSX 文件
    workbook.SaveToFile(
        "monthly_report_updated.xlsx",
        FileFormat.Version2016,
    )
finally:
    # 释放工作簿占用的资源
    workbook.Dispose()

使用同一套 API,还可以将 Excel 工作簿转换为 PDF:

from spire.xls import Workbook, FileFormat

# 创建工作簿对象并加载源文件
workbook = Workbook()

try:
    workbook.LoadFromFile("monthly_report.xlsx")

    # 将工作簿直接转换为 PDF
    workbook.SaveToFile(
        "monthly_report.pdf",
        FileFormat.PDF,
    )
finally:
    # 转换完成后释放资源
    workbook.Dispose()

Excel 转 PDF、图片和 HTML,以及对传统 .xls 文件的支持,通常超出了多数开源 Python 电子表格库的功能范围。

Free Spire.XLS 适合哪些场景

Free Spire.XLS 适合用于:

  • 同时处理传统和现代 Excel 格式
  • 目标计算机无法安装 Microsoft Office
  • 需要将 Excel 转换为 PDF、图片、HTML、CSV 或其他格式
  • 更关注工作簿级功能,而不是 DataFrame 风格的数据处理
  • 希望使用独立 API,而不是自动化桌面版 Excel

使用时需要注意的问题

根据产品页面说明,免费版在处理 .xls 文件时存在以下限制:

  • 每个工作簿最多包含 5 个工作表
  • 每个工作表最多处理 200 行数据

这些限制不适用于 .xlsx 文件。

如果需要处理更大的 .xls 文件,或者将大型工作簿转换为其他格式,则需要升级到完整版本。

5. pyexcel:最适合通过统一 API 处理多种表格格式

pyexcel 更关注数据的可移植性,而不是工作簿的视觉呈现效果。

它提供了一套统一 API,可以将电子表格数据读取为数组、字典或记录,也可以将这些数据写入不同的电子表格格式。

对于 .xls.xlsx.ods 和 CSV 等格式的支持,主要通过插件实现。

安装

可以安装核心包以及应用所需要的格式插件:

pip install pyexcel pyexcel-xlsx pyexcel-xls pyexcel-ods3

不需要安装所有插件。

例如,如果应用程序只处理 .xlsx 文件,可以只安装:

pip install pyexcel pyexcel-xlsx

下面是一个筛选数据并转换格式的基础示例:

import pyexcel

# 将电子表格读取为字典形式的记录列表
# 第一行的值将作为字典的键
records = pyexcel.get_records(
    file_name="employees.xls"
)

# 只保留状态为 Active 的员工
active_employees = [
    record
    for record in records
    if record.get("Status") == "Active"
]

# 将筛选后的数据保存为 ODS 电子表格
pyexcel.save_as(
    records=active_employees,
    dest_file_name="active_employees.ods",
)

pyexcel 适合哪些场景

pyexcel 适合用于:

  • 内部业务系统中的数据导入和导出
  • 标准化用户上传的电子表格数据
  • 在不同电子表格格式之间转换简单表格
  • 只关注数据内容、不关注视觉样式的工作流程
  • 希望使用统一接口处理多种文件格式的应用程序

pyexcel 不适合哪些场景

pyexcel 并不侧重以下功能:

  • 字体
  • 颜色
  • 图表
  • 高级工作簿排版
  • 精细格式控制

还需要注意,pyexcel 本质上主要是一层抽象接口。不同格式的插件在内部仍可能依赖其他电子表格库。

例如,某个 .xlsx 插件在底层仍可能使用 openpyxl。

因此,pyexcel 提供的是另一种更统一的编程接口,但它未必完全独立于底层的电子表格处理库。

应该选择哪个 openpyxl 替代方案

与其单纯比较功能数量,不如根据实际工作流程选择工具。

选择 XlsxWriter

当你需要从零创建一个格式精美、可以直接交付的工作簿,并且不需要读取或修改现有文件时,选择 XlsxWriter。

选择 pandas

当 Excel 主要是结构化数据的载体,真正复杂的工作是数据转换、聚合、清洗或分析时,选择 pandas。

选择 xlwings

当必须由 Excel 本身打开文件、计算公式、执行宏,或者保留 Excel 应用程序特有的行为时,选择 xlwings。

选择 Free Spire.XLS for Python

当你需要处理传统 Excel 格式、在没有 Microsoft Office 的环境中独立处理工作簿,或者将 Excel 转换为 PDF、图片等格式时,可以选择 Free Spire.XLS for Python。

不过,在正式使用之前,应先确认免费版本的功能和文件大小限制是否满足需求。

选择 pyexcel

当你需要使用一套简单、统一的接口,在多种电子表格格式之间导入、导出或转换基础表格数据时,选择 pyexcel。

继续使用 openpyxl

如果你需要一个成熟的开源库,用于读取和修改现代 Excel 工作簿,同时又不希望安装 Microsoft Excel,那么 openpyxl 仍然是一个非常合理的默认选择。

对于大多数常规的 .xlsx 自动化任务,openpyxl 依然能够很好地满足需求。

总结

openpyxl 并不存在一个可以覆盖所有场景的单一替代品。每个库都针对不同类型的 Excel 工作流程进行了优化。

可以按照以下思路进行选择:

  • 使用 XlsxWriter 创建新的格式化报表
  • 使用 pandas 进行数据处理和分析
  • 使用 xlwings 自动化桌面版 Excel
  • 使用 Free Spire.XLS 进行工作簿转换和多格式处理
  • 使用 pyexcel 实现简单的多格式数据交换

最合适的工具,不一定是功能最多的工具,而是能够准确匹配核心任务,同时又不会引入不必要复杂度的工具。

Logo

这里是“一人公司”的成长家园。我们提供从产品曝光、技术变现到法律财税的全栈内容,并连接云服务、办公空间等稀缺资源,助你专注创造,无忧运营。

更多推荐