0

これは非常に奇妙な問題です。Excel スプレッドシート (バージョン 2007 以降) を開いて変更する Perl (バージョン 5.12) スクリプトがあります。以下は、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 のタスク スケジューラに追加されます。これは、毎日同じ時刻に呼び出されるためです。タスク スケジューラからスクリプトを実行すると、上記の「Open」ステートメントでエラーが発生し、中止されますが、$! 完全に空白です。

ただし、Perl スクリプトをコマンド ラインから手動で実行すると、open-Excel ロジックを含め、すべて正常に動作します。コマンド ライン実行とスケジューラ実行の違い、および Open が失敗したときにエラー メッセージが表示されない理由がわかりません。

この問題について何か手がかりがあれば教えてください。ありがとう。

更新: Jason Gray のおかげで、Excel ファイルにアクセスできないというエラー メッセージが表示されるようになりました。しかし、これは私には意味がありません。なぜなら、ファイル パスが正しく、他の誰も同じファイルを使用していないことを保証できるからです。最も重要なことは、Perl スクリプトは、コマンド ウィンドウから実行するときに完全に機能することです。タスク スケジューラからの実行とコマンド ラインからの実行の違いは何ですか?

解決しました!この奇妙な問題に対する奇妙な解決策を見つけました。これらのリンクを参照してください: Link1 Link2 Link3

4

2 に答える 2

1

Win32::OLE のドキュメントでは、例外がスローされるタイミングと例外をキャッチする方法について説明しています。

LastErrorエラーが発生した後に、エラーに関する情報を提供します。

次のようなことができます。

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