我在使用 win32com
时遇到问题和任务计划程序。 尽管脚本的其他方面已成功执行,但没有执行 Excel 文件保存操作 .这是在自动化机器上运行的;没有事件的登录 session 。请参阅下面的事实。
我是 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()
事实
我一头扎进了 Win32Com,所以我想我错过了一些东西。为什么这个脚本不保存文件?
最佳答案
好吧,它已经快 4 年了,但没有答案,希望它仍然相关,因为我最近遇到了这个问题并设法解决了它。这个问题有两个原因:
首先,必须解决 DCOM 权限问题:
- Go to Start > Run and type dcomcnfg
- In the left pane, drill down to Component Services > Computers > My Computer and select DCOM Config
- Then find Microsoft Excel Application, and right click select Properties
- Go to the Identity tab, select "this user" and enter username/password and then click Apply and Ok
其次,让office组件非交互运行:
创建这两个文件夹(这两个文件夹都是 64 位系统所必需的):
32位:
C:\Windows\System32\config\systemprofile\Desktop
64位:
C:\Windows\SysWOW64\config\systemprofile\Desktop
关于Python Win32Com & Excel.Application 无法保存在调度程序上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42444719/