如何在电脑关机时定时运行Jupyter Notebook并保存Excel至SharePoint
方案建议:定时运行与流程优化
一、午夜定时运行Notebook的实现方法
Windows环境(任务计划程序)
- 先把Notebook转成Python脚本:执行
jupyter nbconvert --to script your_notebook.ipynb,把.ipynb转成.py文件,不用依赖Jupyter环境就能直接运行 - 写个批处理文件:新建
.bat文件,内容为call conda activate 你的虚拟环境名 && python "脚本的完整路径"(不用虚拟环境的话直接写python "脚本路径") - 设置任务计划:
- 创建基本任务,触发条件选「每天」,时间设午夜前半小时(比如23:30,留够API运行的5分钟)
- 操作选「启动程序」,指向刚才的.bat文件
- 配置里勾上「唤醒计算机运行此任务」,避免电脑休眠导致任务不执行
- 注意任务的运行用户要能访问本地环境变量和SharePoint路径
Linux/macOS环境(crontab)
- 同样转成.py脚本,先手动跑一遍确认能正常生成Excel并传到SharePoint
- 编辑定时任务:执行
crontab -e,添加一行30 23 * * * /你的Python环境路径/bin/python /脚本的完整路径(23:30每天运行,路径换成实际值) - 如果依赖环境变量,要么把变量写在脚本开头,要么在crontab里指定加载环境的命令
直接运行Notebook(不转脚本)
不想转脚本的话,直接用命令jupyter nbconvert --execute --to notebook --inplace your_notebook.ipynb执行Notebook,把这个命令加到任务计划或crontab里,还能保留Notebook的输出记录,但得保证Jupyter环境正常运行
二、流程优化建议
API请求提速
- 检查API是否支持增量更新:别每次拉取全量数据,改成只拉当日新增或变化的数据,能大幅缩短请求时间
- 添加请求缓存:对不会变的静态数据做本地缓存,比如用
functools.lru_cache或者本地文件缓存,避免重复调用API - 并行请求:如果有多个独立的API接口,用
asyncio或者threading并行调用,把串行的5分钟耗时压缩到1-2分钟
SharePoint存储优化
- 尽量用SharePoint的REST API直接上传文件,比映射本地驱动器更稳定,也不容易出现权限问题
- 添加结果校验:脚本跑完后检查生成的Excel文件大小、数据行数,要是不符合预期就触发提醒(比如邮件),避免Power Query刷新到无效数据
凭证管理简化
- 用
python-dotenv库:把API凭证存到.env文件里,脚本开头加from dotenv import load_dotenv; load_dotenv()直接加载,不用手动设置系统环境变量,定时任务也能轻松读取
三、电脑午夜关机的特殊处理
如果你的电脑到点自动关机,调整任务触发逻辑:
- 把任务时间设为关机前30分钟,任务计划里加后续操作:运行完脚本后执行
shutdown /s /t 0(Windows)或者shutdown -h now(Linux/macOS),实现自动关机 - 要是电脑经常不在午夜开机,干脆把Notebook部署到云服务器,用服务器的定时任务每天运行,不管本地电脑状态如何,都能保证数据每日更新
内容的提问来源于stack exchange,提问作者Tig Walker
相关产品推荐
相关产品推荐

