我遇到一个问题,当我自动创建一个 Excel.Application COM 对象、将一些数据添加到工作簿中,然后将文档保存为 xlsx 时。
如果满足以下条件,则此方法有效:
- 我已经在 Powershell 交互式主机中,可以按顺序运行每个命令,或者作为 ps1 执行。
- 我从 cmd.exe 运行它,使用以下语法:powershell.exe -命令“c:\path\to\powershellscript.ps1”
- 我在 Windows 7 / Server 2008 R2 中创建了一个计划任务,使用上面的 powershell.exe -command 语法,并使用“仅在用户登录时运行”模式。
它失败当我修改相同的计划任务,但将其设置为“无论用户是否登录,都运行“。
这是一个示例脚本,说明了我遇到的问题:
$Excel = New-Object -Com Excel.Application
$Excelworkbook = $Excel.Workbooks.Add()
$excelworkbook.saveas("C:\temp\test.xlsx")
$excelworkbook.close()
我有一个理论,如果我的配置文件没有加载/如果它没有在命令窗口中执行,那么 COM 对象就会以某种方式失败。
关于创建计划任务时应选择哪些选项,或者创建 Excel 对象或使用 SaveAs() 函数时应使用哪些选项,您有什么想法吗?有人能重现这种情况吗?我在 Server 2008 R2 计算机和 Windows 7 上都看到了这种行为。还没有尝试过其他平台。
答案1
您是否在未登录时尝试实际运行此程序?如果是这样,我会向您指出此 Microsoft KB 文章,其中有一些可能的原因:服务器端 Office 自动化的注意事项.标题说服务器端但文章还指出,这适用于未在交互式会话中运行且未加载用户配置文件的 Windows 客户端版本。
如果您确实希望在用户未登录的情况下运行此程序(使用您描述的选项,听起来您确实希望这样做),最终我不确定您是否能够解决您的问题,原因如文章中所述。如果您只需要在登录时运行它,只是不要选择该选项?
答案2
我被这个问题搞得焦头烂额,不想重写代码。我看到了你的帖子和其他几篇帖子,这让我差点放弃。然而,我的坚持得到了回报。我试图让 Jenkins 运行一个脚本来清点我们的生产环境并输出到 Excel。我不想要文本文档,因为我用红色突出显示了不匹配的软件版本,所以需要 Excel。
以下是对我有用的答案:
您必须创建一个文件夹(在 64 位 Windows 上创建两个文件夹):
(始终为 64 位)
C:\Windows\System32\config\systemprofile\Dektop
(32位)
C:\Windows\SysWOW64\config\systemprofile\桌面
某人提供的来源链接:
http://www.patton-tech.com/2012/05/printing-from-scheduled-task-as.html
我的消息来源是: