我遇到使用win32com
和任务计划程序的问题。 尽管脚本执行成功的其他方面,但仍未执行Excel文件保存操作。这是在自动化机器上运行的;没有活动的登录会话。见下面的事实。
我是Win32COM的新手,所以我可能不明白它何时以及如何在Python中使用。
我有一个Python脚本,它通过任务计划程序在一夜之间运行,它从内部数据库收集数据并将其输出到报告中。原始脚本使用csv
输出数据,但我了解了使用Excel VBA命令创建xlsx文件的win32com
。
我使用代码扩展了我现有的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()
我一头扎进Win32Com,所以我希望我错过了一些东西。为什么这个脚本不会保存文件?
答案 0 :(得分:0)
它已经快四年了,但是没有答案,希望它在我最近面对这个问题并设法解决这个问题时仍然有意义。此问题有两个原因:
- 转到“开始”>“运行”,然后键入dcomcnfg
- 在左窗格中,向下钻取到“组件服务”>“计算机”>“我的电脑”,然后选择“ DCOM Config”
- 然后找到Microsoft Excel应用程序,然后右键单击选择“属性”
- 转到“身份”标签,选择“此用户”,然后输入用户名/密码,然后单击“应用”,然后确定
创建这两个文件夹(对于64位系统,两个文件夹都是必需的):
32位:
C:\ Windows \ System32 \ config \ systemprofile \ Desktop
64位:
C:\ Windows \ SysWOW64 \ config \ systemprofile \ Desktop