pandas.to_excel()报错modulenotfounderror: no module named 'openpyxl'是因为该库需手动安装;导出前须处理空值、时间字段及数值类型;定时任务推荐apscheduler;多sheet导出必须用with pd.excelwriter确保正确关闭。

用 pandas 写 Excel 时为什么总报 ModuleNotFoundError: No module named 'openpyxl'
因为 pandas.to_excel() 默认依赖 openpyxl(处理 .xlsx)或 xlsxwriter(可选后端),但这两个库不会随 pandas 自动安装。
必须显式安装:
-
pip install openpyxl—— 推荐,支持读写、样式、公式、多 sheet -
pip install xlsxwriter—— 仅写入,速度快,但不支持读取已有文件
如果只装了 pandas 就调 to_excel(),一定会崩。别跳过这步。
导出前要处理空值和时间字段——否则 Excel 里全是 NaT 或 None
爬虫数据常含缺失时间、空字符串、None 或 NaN,直接写入 Excel 会显示为 #VALUE! 或乱码单元格。
- 时间列用
df['date'] = pd.to_datetime(df['date'], errors='coerce')统一转为datetime64,再用.dt.strftime('%Y-%m-%d %H:%M')转成字符串(Excel 更认) - 空值统一替换:
df.fillna('', inplace=True),避免写入None导致 openpyxl 报错 - 数值列若有字符串混入(如“暂无”),先
pd.to_numeric(..., errors='coerce')转换,再填空
用 schedule 做定时任务时,别在脚本里直接跑 while True
schedule 本身不阻塞,但常见错误是写成:
快速生成专业的 Python 脚本和应用代码。一键创建完整项目结构,支持CLI、API、爬虫、Bot、Django等多种项目类型,包含完整的项目结构、配置文件、依赖管理、测试、README和文档。
schedule.every().day.at("09:00").do(export_to_excel)<br>while True:<br> schedule.run_pending()<br> time.sleep(1)
这会导致脚本一直占进程、无法被系统服务管理,且异常退出后定时就停了。
- 生产环境建议改用
APScheduler(支持持久化、job 恢复、线程/异步模式):pip install apscheduler - 简单场景可用 systemd(Linux)或 Task Scheduler(Windows)调度 Python 脚本,更可靠
- 若坚持用
schedule,至少加日志和异常捕获:try...except包住export_to_excel(),不然一次失败整个定时链就断了
导出多张表时,ExcelWriter 必须用 with 语句
手动 close() 容易忘,导致文件被锁、下次写入报错 PermissionError 或 Excel 打开提示“文件已损坏”。
- 正确写法:
with pd.ExcelWriter('report.xlsx', engine='openpyxl') as writer:<br> df_main.to_excel(writer, sheet_name='原始数据', index=False)<br> df_summary.to_excel(writer, sheet_name='汇总', index=False)
- 不用
with?openpyxl可能没 flush 到磁盘,文件看似生成了,实则内容不全 - 多个 sheet 名不能重复,也不能含
/ \ [ ] * ? :—— 否则openpyxl直接抛ValueError
路径带中文没问题,但别用桌面这种权限不稳定的目录;推荐写绝对路径,比如 /data/reports/report_20241005.xlsx。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!










