一、各库定位 & 适用场景
-
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引擎。