[英]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腳本可以正常工作。 從任務計划程序運行和從命令行運行可能有什么區別?
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.