【发布时间】:2015-06-24 18:21:22
【问题描述】:
由在 Windows Server 2012(64 位)上运行的任务计划程序执行的 python 2.7 脚本在打开现有 XLS 文件时不会引发异常。创建调度工作正常(尝试/除了未显示):
xlApp = win32com.client.DispatchEx('Excel.Application')
但在那之后:
try:
log_message("Opening Excel Workbook object for the attachment using password '%s'" % email_found['PASSWORD'])
workbook = xlApp.Workbooks.Open(attachment, False, False, None, email_found['PASSWORD'])
log_message("Workbook opened, produced object with type '%s'" % type(workbook).__name__)
except Exception, e:
log_message("Exception opening workbook")
message = "Exception raised : %s" % str(e)
log_message(message, 'ERROR')
xlApp.Quit()
return 22
log_message() 写入日志文件并可选择发送电子邮件。出现第一条消息,这就是日志文件的结尾。 Excel 在任务管理器中显示为正在运行,而任务在任务计划程序中显示为正在运行。
同样的脚本,当由同一用户在命令 shell 中运行时,成功完成。同样的脚本,当在 Win7 机器上的任务计划程序中运行时,成功完成。
其他信息:
- 其帐户运行任务的用户是本地管理员。我已经尝试了两个这样的用户,但两者都发生了同样的事情。
- 盒子上只安装了一个 Excel (2010) 实例。
- 完整路径在“附件”中的文件肯定存在,可以用Excel交互打开。
- 存储在 email_found['PASSWORD'] 的字符串包含 XLS 文件的正确密码。
- 我发现一些帖子提到了拥有这些目录中的一个或另一个(或两者)的必要性:
C:\Windows\SysWOW64\config\systemprofile\Desktop
C:\Windows\System32\config\systemprofile\Desktop
两者都在我面前(它们是空的)。 - 我在 Windows 上运行此脚本,而不是在我们首选的 Linux 平台上使用 xlrd,因为 xlrd 不支持受密码保护的 XLS 文件。 XLS 文件由客户每周发送给我们。
欢迎提出任何建议,提前致谢。
【问题讨论】:
-
'attachment' 是 XLS 文件的完整路径;我将制作一个不受密码保护的版本。感谢您的反馈。
-
我已经针对非密码保护的 XLS 文件运行了一部分代码。同样的事情发生:执行停止在调用 xlApp.Workbooks.Open()
-
我已经使用受密码保护和不受密码保护的文件对此进行了测试,这些文件存储在本地磁盘和服务器共享上(使用 UNC 名称访问)。只要 XLS 文件在本地存储,该脚本就可以工作。追逐那个,我在superuser上找到了这篇文章
标签: python-2.7 win32com import-from-excel