EXCEL2007でIIS/COM経由でのファイルアクセスでメモリ・ディスク容量不足

VB6,VBA,VBS,EXCEL,DOS,BAT,WSH,WORDの小技メモ

HTML/ CSS/ CGI-Perl/ JavaScript/ JavaApplet/ AccessUp/ Internet/ EnglishLearn/ ちゃいちゃん天使/ 天使メッセージ/ 飯田ワールド/ 結城ワールド/ プロフィール/ WEB相談室/ WEBアンテナ/ 燈明日記/ Perlノート/ 漢字起源/ yahoo

はじめに

本ページは、ウインドウズ系全般のティプスメモです。

そう、はじめはVB系のティプスメモだったのですが…いつの間にか、ウインドウズ系全般のティプスメモになってしまいました。

ちなみに、ティプス(Tips)とは、マニュアルに書かれていない技法や裏わざのことですが、本ページでは、私が経験してこれはと思ったノウハウのメモになっています。

尚、以下は本サイトの最新情報(ブログ)です。

それでは、本ページが何かのお役に立てれば幸いです。ごゆっくりご覧ください。

2008-09-27 EXCEL2007でIIS/COM経由でのファイルアクセスでメモリ・ディスク容量不足エラー

以前ご紹介した以下のプログラムで、EXCEL2003なら問題ないのですが、EXCEL2007だとエラーになります。


普通にコマンドプロンプトから実行するとEXCEL2007でもエラーになりません。

しかし、IIS/COM経由(WebページからCGI)で実行した時に、『$Excel->Workbooks->OpenText』のところで、以下のエラーとなるのです。


『メモリまたはディスクの空き容量が不足しているため、ドキュメントを開いたり、保存したりできません。 error 0x800a03ec』


Perlで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();
}
http://d.hatena.ne.jp/chaichanPaPa/20071130/1196424782

いろいろ調べてはみましたが、結論としては、わかりませんでした。

わかったことは、エラー0x800a03ecは、EXCELでファイルアクセスが出来ないときに出る感じです。

また、EXCEL2007では、IISやCOM経由で起動された場合には、なにかの設定があるのかもしれません。

何かご存知の方、もしよろしければ情報提供をお願いします。


ちなみに、IISやCOMのACL(アクセス制御リスト)は、EXCEL2003で大丈夫なので問題ないはずなのですが・・・。

おわりに

以下のページには、すべてのTIPSがあります。もしよろしければ、どうぞ!

尚、ご感想、ご意見、誤字、脱字、間違い等がありましたら遠慮なくVB-TIPS掲示板へご指摘ください。

人のよいところをどんどん見つけよう