簡體   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