【发布时间】:2017-07-15 15:27:55
【问题描述】:
我在使用 win32com 和任务计划程序时遇到问题。 尽管脚本的其他方面已成功执行,但没有执行 Excel 文件保存操作。这是在自动化机器上运行的;没有活动的登录会话。请参阅下面的事实。
我是 Win32COM 的新手,所以我可能不明白它何时以及如何在 Python 中使用。
背景
我有一个 Python 脚本,它通过任务计划程序在一夜之间运行,它从内部数据库收集数据并将其输出到报告中。原始脚本使用csv 输出数据,但我学习了win32com 使用Excel VBA 命令创建xlsx 文件。
我用代码扩展了我现有的 chronjob 以环绕使用 pymysql 的现有数据库操作:
import win32com.client as win32
try:
excel = win32.gencache.EnsureDispatch('Excel.Application')
excel.DisplayAlerts = False
wb = excel.Workbooks.Add()
basesht = wb.Sheets('Sheet1')
except:
#E-mail notification of failure.
sys.exit()
脚本会执行一些需要几分钟的数据库操作。有些使用csv 导出到.csv,有些创建一个新工作表并使用此代码导出获取的数据:
#For Each Report in Report Set (DB = Object extending pymysql)
resultSet = db.qryfetchall()
headers = list(resultSet[0].keys())
r, c = 1, len(headers)
wksht.Range(wksht.Cells(r,1),wksht.Cells(r,c)).Value = headers
for row in resultSet:
r += 1
wksht.Range(wksht.Cells(r,1),wksht.Cells(r,c)).Value = [str(i) for i in list(row.values())]
wksht.Columns.AutoFit()
else:
wksht.Range("A1").Value = "No Results"
程序以此结束:
if wb.Sheets.Count > 1:
basesht.Delete()
wb.SaveAs(consolidated) #consolidated = save path
excel.Application.Quit()
事实
- 任务计划程序中的任务已使用管理员帐户正确设置。正在创建的脚本中的其他文件证实了这一点。
- 在登录到自动化机器时运行脚本将正确创建 Excel 文件并保存。
- 任务计划程序在完成时报告 0x1 错误。
我一头扎进了 Win32Com,所以我想我错过了一些东西。为什么这个脚本不保存文件?
【问题讨论】:
-
当谈到 Dispatches 和 COM 时,我不熟悉阻塞与非阻塞,但它可能是相关的。我是否尝试在用户未登录的情况下分派和使用 COM,以深入研究更高级的计算机编程主题?如果我希望对 chronjobs 进行更高级的 Excel VBA 操作,我需要了解这一点。至少,是否有可能找出Task Scheduler抛出的错误或其他信息?
-
我也遇到了 COM 问题。您是否尝试使用 openpyxl 而不是 COM。您似乎正在做的事情应该可以通过 openpyxl 轻松实现
标签: python excel com scheduled-tasks win32com