一、各库定位 & 适用场景

  • 1. openpyxl

  • 读写 .xlsx,原生操作单元格、格式、合并单元格、图表、批注

  • 面向单元格精细操作,适合修改已有表格、调格式、复杂报表

  • 底层纯 Python,大文件速度一般,内存占用偏高

  • 2. xlsxwriter(X 开头)

  • 仅新建写入 xlsx,不能打开已有文件修改

  • 支持丰富样式、图表、条件格式

  • 写入速度远快于 openpyxl,批量导出数据首选

  • 3. xlrd(X 开头)

  • 只读库,新版仅支持 .xls(二进制旧表格),不支持 xlsx

  • 读取 xls 速度极快,xlsx 请放弃 xlrd

  • 4. pandas

  • 底层封装 openpyxl /xlsxwriter/xlrd,本身不直接解析 Excel

  • 读:pd.read_excel() 默认引擎 openpyxl/xlsx

  • 写:df.to_excel() 可指定 engine=xlsxwriter /openpyxl

  • 优势:批量表格数据、大数据集、数据分析;劣势:精细单元格格式难操作

二、效率排名(分场景)

场景 1:大批量导出数据(几万 / 几十万行,只写数据,不需要修改旧表)

速度从快到慢:

xlsxwriter > pandas(engine=xlsxwriter) > pandas(engine=openpyxl) > openpyxl

xlsxwriter 底层 C 优化,写入性能碾压 openpyxl,海量导出必选。

场景 2:读取大 xlsx 文件,只拿数据做分析

速度:

pandas (openpyxl 引擎) ≈ openpyxl

二者差距很小;如果是老 xls 文件,xlrd 读取速度最快。

场景 3:打开已有 xlsx,修改单元格、调整格式、增删行列

只能用 openpyxl(xlsxwriter 不能打开旧文件)

此时没有替代,效率上限就是 openpyxl,大数据会卡内存。

三、关键结论

  • 1. 单纯导出大量数据 追求效率:用 pandas + xlsxwriter

  • 2. 需要编辑已有 Excel、调样式、图表、合并单元格 :只能 openpyxl

  • 3. 读取老式 .xls 文件:xlrd

  • 4. 不要用纯 openpyxl 循环逐行写入上万行数据,速度极慢;批量 DataFrame 写入优先 xlsxwriter 引擎

补充避坑

  • xlsxwriter 无法加载已存在的 demo.xlsx,只能新建文件;

  • openpyxl 读写 xlsx 全能,但循环 cell 写入效率低;

  • pandas 只是封装工具,真正决定速度的是你指定的engine引擎。