Windows任务计划程序执行Python脚本写入Excel时出错求助
问题描述
尝试通过Windows 11任务计划程序定时运行批处理文件,以执行Python脚本写入Excel文件。任务计划程序显示运行成功,但Python脚本始终在写入Excel环节报错。
已尝试的操作
- 批处理文件内容:
py WriteToExcel.py
- 使用两个管理员组账户运行任务,均配置了脚本及文件所在驱动器的完全权限,且所有文件已解除阻止
- 批处理、Python脚本、Excel文件位于同一本地文件夹,通过命令行直接执行批处理完全正常,但任务计划程序执行时必然触发报错
- Python脚本报错代码段:
try: wb = xw.Book("E:\Project\Python\DevResults.xlsx") # wb = xw.Book("DevResults.xlsx") WriteLog("Writing ", "DevResults.xlsx") except: WriteLog("ERROR ", "Error writing to DevResults")
完整Python脚本
# imports from sqlalchemy import create_engine from sqlalchemy.engine import URL import pandas as pd import sqlalchemy as sa import xlwings as xw from UploadData import sftpMethod from sqlalchemy import text from WriteLog import WriteLog connection_string = "xxx" connection_url = URL.create( "mssql+pyodbc", query={"odbc_connect": connection_string}) engine = sa.create_engine(connection_url) qry = text("EXECUTE dbo.GatherData") with engine.connect() as con: rs = con.execute(qry) df = pd.read_sql_query(qry, engine) # load workbook app = xw.App(visible=False) try: wb = xw.Book("E:\Project\Python\DevResults.xlsx") # wb = xw.Book("DevResults.xlsx") WriteLog("Writing ", "DevResults.xlsx") except: WriteLog("ERROR ", "Error writing to DevResults") #ALWAYS AN ERROR ws = wb.sheets['Dev'] # Update workbook at specified range ws.range('A2').options(index=False, header=False).value = df # Close workbook wb.save() wb.close() app.quit()
可能的解决方法
1. 修复路径转义问题
Python中\是转义字符,直接写路径会导致解析错误,改用以下两种写法之一:
- 双反斜杠:
"E:\\Project\\Python\\DevResults.xlsx" - 原始字符串:
r"E:\Project\Python\DevResults.xlsx"
2. 明确Python解释器路径与工作目录
任务计划的环境变量可能与命令行不一致,修改批处理文件:
cd /d "E:\Project\Python" "C:\Python39\python.exe" WriteToExcel.py
注:将C:\Python39\python.exe替换为你的Python实际安装路径
3. 配置Excel的DCOM权限
xlwings依赖Excel的COM服务,后台运行时需配置权限:
- 运行
dcomcnfg打开组件服务 - 依次展开组件服务>计算机>我的电脑>DCOM配置,找到Microsoft Excel应用程序
- 右键选择属性,在安全选项卡中,给运行任务的账户分配启动和激活权限、访问权限的允许权限
4. 捕获具体错误信息
修改异常捕获逻辑,记录详细错误以便定位问题:
try: wb = xw.Book(r"E:\Project\Python\DevResults.xlsx") WriteLog("Writing ", "DevResults.xlsx") except Exception as e: WriteLog("ERROR ", f"Error writing to DevResults: {str(e)}")
5. 调整任务计划程序配置
- 在任务常规选项卡,勾选不管用户是否登录都要运行,同时勾选使用最高权限运行
- 在操作选项卡,编辑启动程序的操作,在起始于中填写脚本所在文件夹路径:
E:\Project\Python
内容的提问来源于stack exchange,提问作者SkyeBoniwell
相关产品推荐
相关产品推荐

