Python Win32Com & Excel.Application 无法保存在调度程序上

标签 python excel com scheduled-tasks win32com

我在使用 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()

事实
  • 任务计划程序中的任务已使用管理员帐户正确设置。正在创建的脚本中的其他文件证实了这一点。
  • 在登录到自动化机器时运行脚本将正确创建 Excel 文件并保存。
  • 任务计划程序在完成时报告 0x1 错误。

  • 我一头扎进了 Win32Com,所以我想我错过了一些东西。为什么这个脚本不保存文件?

    最佳答案

    好吧,它已经快 4 年了,但没有答案,希望它仍然相关,因为我最近遇到了这个问题并设法解决了它。这个问题有两个原因:

  • DCOM 权限问题
  • 以非交互方式运行 Office 组件(如通过任务计划程序运行)

  • 首先,必须解决 DCOM 权限问题:
    1. Go to Start > Run and type dcomcnfg
    2. In the left pane, drill down to Component Services > Computers > My Computer and select DCOM Config
    3. Then find Microsoft Excel Application, and right click select Properties
    4. 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/

    相关文章:

    python - 使用 numpy.mean 求平均值直到数字 N

    vba - VBA 用户窗体文件选择的省略号文本框

    c# - InvalidCastException 对象 [*] 到对象 []

    c# - 从非托管进程卸载 .NET DLL

    python - FastAPI 等效于 Flask 的 request.form,用于不可知的表单

    python - 使用 __setstate__ 和 __getstate__ 的简单示例

    python - 如何遍历lxml对象的节点来查看属性是否存在?

    excel - 如何在excel vba中单击切片器中的值时运行宏

    c# - 如何使用 C# 在 Excel 图表上切换行/列?

    c# - 用 C# 为 Windows API 编写 COM 服务器,从哪里开始?