- 締切済み
C#からExcelを複数起動させる処理でエラーが発生する
VisualStudio2008C#でExcel2007を操作するプログラムを作成しています。 以下のメソッドでファイルを開いています。 public void OpenExcelFile(String l_templatePath) { this.templatePath = l_templatePath; excelApp = new Excel.Application(); excelApp.Visible = false; // ウィンドウ表示設定 excelApp.DisplayAlerts = false; // アラートを表示しない excelBooks = excelApp.Workbooks; excelBook = excelApp.Workbooks.Open(this.templatePath, Type.Missing, false, Type.Missing, Type.Missing, Type.Missing, true, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing); excelSheets = excelBook.Worksheets; excelSheet = (Excel.Worksheet)excelBook.ActiveSheet; excelCell = excelSheet.Cells; } このコードで190個ほどファイルを開かなければならないのですが40~60個ほど開くと下記のようなエラーが発生してしまいます。 CLSID {00024500-0000-0000-C000-000000000046} を含むコンポーネントの COM クラス ファクトリを取得中に、次のエラーが発生しました: 80080005。 開くファイルが40個以下ならば問題なく動作しております。 どなたか知恵を貸してはいただけませんでしょうか。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- ape5
- ベストアンサー率57% (85/148)
助けになるかわかりませんが案を一つ。 案1.それぞれのファイルが他方に書き写すなどでなければ、一つずつ処理をして終わったら閉じる。 案2.上記のようではなくあるファイルが他のファイルに影響を与えるような処理があるのであれば、マスターファイルのようなものを作り、それに開いたファイルからシートをコピーし、コピーしたファイルから順次閉じていく。 そして終わったらそれらを元のファイルをまた開きなおして順次コピーをし、終わったら閉じていく。 恐らく現状の処理ではメモリ不足でダメなのではないかと推測しているので、「一つ開いては終わったら閉じる」というのがベターなのかなと思っております。 参考になれば。
補足
エラーになったときの状況をモニタリングしたのですが、エラー発生時に利用できる空きメモリの容量は1.3GBあるのでメモリ不足ではないようです。 今回のプロジェクトはVB6で作成されたシステムをC#で焼きなおすものなのですが、VB6では問題なく動作してしまうんです。また焼き直しなんだから仕様の変更は認めないと、頭を押さえつけられている状況にあります。