繁体   English   中英

从Windows任务计划程序执行时,Perl无法打开excel文件

[英]Perl fails to open excel file when executing from Windows Task Scheduler

这是一个非常奇怪的问题。 我有一个Perl(版本5.12)脚本,可以打开并修改Excel电子表格(2007版或更高版本)。 下面是打开Excel文件的Perl代码:

my $excel = Win32::OLE->GetActiveObject('Excel.Application')
            || Win32::OLE->new('Excel.Application', 'Quit');
my $book = $excel->Workbooks->Open($excelPath) or die $!;

整个Perl脚本被添加到Windows Server 2008 R2中的任务计划程序中,因为它将在每天的同一时间被调用。 当我从任务计划程序运行脚本时,上面的“打开”语句发生错误并中止,但$! 完全是空白的。

但是,当我从命令行手动运行Perl脚本时,一切正常,包括open-Excel逻辑。 我无法弄清楚命令行执行和调度程序执行之间的区别,以及为什么在Open失败时没有可用的错误消息。

如果您对此问题有任何疑问,请与我们联系。 谢谢。

更新 :感谢Jason Gray,我能够看到错误消息,该消息抱怨无法访问Excel文件。 但这对我没有意义,因为我可以保证文件路径是正确的,并且没有其他人使用相同的文件。 最重要的是,从命令窗口运行时,Perl脚本可以正常工作。 从任务计划程序运行和从命令行运行可能有什么区别?

解决了! 我找到了一个奇怪的解决方案。 请参考以下链接: Link1 Link2 Link3

Win32 :: OLE文档解释了何时抛出异常/如何捕获它们。

LastError为您提供有关错误发生后的错误信息。

你可以这样做:

my $book = $excel->Workbooks->Open($excelPath) || 
           die("Unable to open document ", Win32::OLE->LastError());

请显示您的$excelPath变量。 您使用的是绝对路径还是相对路径?

您使用什么帐户从Scheduler运行脚本? 它是否有足够的权限来访问您的$excelPath

如果您的Excel文件与脚本本身位于同一文件夹中,我建议use FindBin

use FindBin qw($Bin);

.....

my $book = $excel->Workbooks->Open("$Bin/Document_name.xls") || 
           die("Unable to open document ", Win32::OLE->LastError());

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM