0

这是一个非常奇怪的问题。我有一个 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

4

2 回答 2

1

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

您使用什么帐户从调度程序运行脚本?它是否有足够的权限访问您的$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());
于 2013-05-09T00:56:33.953 回答
1

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

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

你可以这样做:

my $book = $excel->Workbooks->Open($excelPath) || 
           die("Unable to open document ", Win32::OLE->LastError());
于 2013-05-08T19:05:01.033 回答