最快方法是用pandas的to_excel(),但需安装openpyxl(pip install openpyxl)解决ModuleNotFoundError;中文乱码需在Excel中设微软雅黑字体或换xlsxwriter引擎;大数据量应分块写入或改用parquet/csv。

直接用 pandas 的 to_excel() 最快,但导出失败、格式错乱、中文乱码、大文件卡死——这些问题基本都出在引擎、编码或写入方式上。
为什么 to_excel() 会报 “ModuleNotFoundError: No module named 'openpyxl'”?
因为 pandas 默认依赖 openpyxl 写 Excel(.xlsx),但它不随 pandas 自动安装。
- 运行
pip install openpyxl(推荐);若只导出.xls,可装xlwt,但已不维护,不建议 - 确认是否误装了
openpyxl的旧版(如 2.x):新版(3.0+)要求 Python ≥ 3.8,低版本 Python 请用openpyxl==2.6.4 - 如果用 conda 环境,注意
conda install openpyxl比 pip 更稳,尤其在 Anaconda 发行版中
中文列名/数据在 Excel 里显示为方框或乱码?
这不是编码问题,是 Excel 默认字体不支持中文。pandas 写入时无法嵌入字体设置,必须后置处理或换引擎。
-
openpyxl本身支持设置单元格字体,但to_excel()不暴露该接口;需用openpyxl手动加载再改 —— 适合导出后微调格式 - 更简单的方法:导出后,在 Excel 中全选 → 设置字体为
微软雅黑或SimSun(宋体) - 若坚持代码内解决,可用
xlsxwriter引擎(需pip install xlsxwriter),它支持指定字体:df.to_excel("out.xlsx", engine="xlsxwriter", options={"strings_to_urls": False})然后用workbook.add_format({"font_name": "微软雅黑"})控制样式
导出 10 万行以上就卡住或内存爆掉?
to_excel() 是全量写入,数据全载入内存再生成文件,不是流式写入。
立即学习“Python免费学习笔记(深入)”;
- 避免一次性
df.to_excel()整个 DataFrame;按块分批写入:with pd.ExcelWriter("out.xlsx", engine="openpyxl") as writer:+ 循环df_chunk.to_excel(writer, sheet_name=f"part_{i}", index=False) - 删除无用列、转换 dtype(比如把长字符串转成
category,把 int64 转成int32)能显著降内存 - 真要导百万级,别硬扛 Excel:优先考虑
to_parquet()或to_csv()(用encoding="utf-8-sig"防 Excel 打开乱码),再让业务方用 Power Query 导入
真正麻烦的不是“怎么导出”,而是“导出后要不要自动加边框、冻结首行、设列宽”——这些 openpyxl 能做,但每加一项就得重写逻辑,一不留神就把脚本变成 Excel 格式生成器。


















