EXCEL2007でIIS/COM経由でのファイルアクセスでメモリ・ディスク容量不足エラー
以前ご紹介した以下のプログラムで、EXCEL2003なら問題ないのですが、EXCEL2007だとエラーになります。
普通にコマンドプロンプトから実行するとEXCEL2007でもエラーになりません。
しかし、IIS/COM経由(WebページからCGI)で実行した時に、『$Excel->Workbooks->OpenText』のところで、以下のエラーとなるのです。
『メモリまたはディスクの空き容量が不足しているため、ドキュメントを開いたり、保存したりできません。 error 0x800a03ec』
http://d.hatena.ne.jp/chaichanPaPa/20071130/1196424782PerlでCSV(テキスト)からXLS(エクセル)への最速変換
#!/usr/local/bin/perl -w use strict; my $csvFile = 'C:\test_book.csv'; # CSVファイル my $xlsFile = 'C:\test_book.xls'; # EXCELブックファイル &csv2xls($csvFile, $xlsFile); sub csv2xls { my ($csvFile, $xlsFile) = @_; use Win32::OLE; # 指定タイプライブラリのコンスタントが参照可能 use Win32::OLE::Const 'Microsoft Excel'; # エラー時に本処理を中止し、Perlがエラーメッセージを出力し、本プロセスが終了する Win32::OLE->Option(Warn => 3); my $Excel; # EXCEL使用可能かチェック eval { Win32::OLE->GetActiveObject('Excel.Application'); }; if ($@) { die "Excelが入っていません。$@"; } # EXCELオブジェクト取得 eval { $Excel = Win32::OLE->GetActiveObject('Excel.Application') || Win32::OLE->new('Excel.Application', 'Quit'); }; if ($@) { die "EXCELオブジェクト取得エラーです。 $@"; } # Csvファイルオープン eval { $Excel->Workbooks->OpenText({Filename => "$csvFile"}); }; if ($@) { die "Csvファイルオープンエラーです。 $@"; } $Excel->ActiveSheet->Cells->{NumberFormatLocal} = "@"; # すべてセルを文字列属性にする。 $Excel->{DisplayAlerts} = 0; # 上書きのAlertダイアログを出さない。 eval { $Excel->ActiveWorkbook->SaveAs({Filename => "$xlsFile", Fileformat => xlWorkbookNormal}); }; if ($@) { die "xlsファイル書き込みエラーです。 $@"; } $Excel->ActiveWorkbook->Close(); $Excel->Quit(); }
いろいろ調べてはみましたが、結論としては、わかりませんでした。
わかったことは、エラー0x800a03ecは、EXCELでファイルアクセスが出来ないときに出る感じです。
また、EXCEL2007では、IISやCOM経由で起動された場合には、なにかの設定があるのかもしれません。
何かご存知の方、もしよろしければ情報提供をお願いします。
ちなみに、IISやCOMのACL(アクセス制御リスト)は、EXCEL2003で大丈夫なので問題ないはずなのですが・・・。