pandas 从 1.4 版本起移除 xlwt 支持,故无法直接生成 .xls;xlwt 仅兼容 python 3.9 及以下,且不支持公式、样式及日期类型,行列表限制严格;推荐转为规范 .xlsx 并清理空表、禁用自动计算、避免无效样式以适配 excel 2003 兼容包。

直接用 openpyxl 或 pandas 默认导出的 .xlsx 文件,老版本 Office(如 Excel 2003)打不开——它只认 .xls 格式,而 Python 原生库已不支持生成该格式。
为什么不能用 pandas.to_excel() 直接生成 .xls
pandas 从 1.4 版本起彻底移除了对 xlwt 引擎的支持,而 xlwt 是唯一能写 .xls 的库;现在默认用 openpyxl(只支持 .xlsx)或 xlsxwriter(也只支持 .xlsx)。试图传入 engine='xlwt' 会报 ValueError: engine 'xlwt' not supported。
用 xlwt 写 .xls(仅限 Python 3.9 及以下)
xlwt 本身不维护多年,且明确不支持 Python 3.10+。若你用的是 Python 3.8 或 3.9,可临时回退使用:
- 安装:
pip install xlwt - 写法简单但限制多:不支持 Excel 2007+ 的样式、公式、合并单元格有限制(最多 256 列 × 65536 行),且无法写入日期时间类型(会变成浮点数序列号)
- 示例:
import xlwt wb = xlwt.Workbook() ws = wb.add_sheet('Sheet1') ws.write(0, 0, 'Hello') ws.write(0, 1, 123) wb.save('output.xls')
更现实的替代方案:转成兼容模式的 .xlsx
多数所谓“老版本 Office”实际是装了 Microsoft Office Compatibility Pack 的 Excel 2003/2007,它能打开标准 .xlsx,但要求文件结构严格符合 OOXML 规范——openpyxl 默认生成的文件有时因元数据或空工作表触发兼容性警告。
- 避免空工作表:
workbook.remove(workbook.active)后再新建 sheet - 禁用自动计算:
wb.calculation.calc_mode = 'manual' - 不写无效样式(如
font.size = None),否则 Excel 2003 兼容包可能拒绝打开 - 用
pandas时指定引擎和参数:df.to_excel('output.xlsx', engine='openpyxl', index=False) # 然后用 openpyxl 手动清理 workbook 对象(见上两条)
真正卡在 Excel 2003 且无法升级或装兼容包的场景极少;优先确认对方是否真没装兼容包,而不是硬塞 .xls——后者反而更容易因编码、样式或行数超限出错。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!











