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

这是一个非常奇怪的问题。 我有一个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失败时没有错误消息可用。

请让我知道,如果你有任何线索关于这个问题。 谢谢。

更新 :感谢杰森·格雷,我能够看到错误消息,它抱怨Excel文件无法访问。 但这对我来说没有意义,因为我可以保证文件path是正确的,没有其他人使用同一个文件。 最重要的是,从命令窗口运行Perl脚本完美的作品。 从任务计划程序运行和从命令行运行之间有什么区别?

解决了! 我发现这个奇怪的问题奇怪的解决scheme。 请参考以下链接: Link1 Link2 Link3

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

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

你可以做这样的事情:

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

请显示您的$excelPathvariables。 你使用绝对path还是相对path?

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

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

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