1

Excel ファイルから読み取り、Excel ファイルを出力する C# プログラムをいくつか作成しました。ただし、プログラムが終了し、すべてのファイルが閉じられた後も、多くの Excel プロセスがまだ実行されていることに気付きました。ファイルの作成と終了を処理する方法は次のとおりです。

Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application();
Workbook wb = xlApp.Workbooks.Add(XlWBATemplate.xlWBATWorksheet);
Worksheet ws = (Worksheet)wb.Worksheets[1];
...
wb.Close(true, saveDirectory + "\\" + reportName, false);
xlApp.Quit();
Marshal.ReleaseComObject(wb);
Marshal.ReleaseComObject(xlApp);
this.Close();

何か不足していますか?アドバイスをいただければ幸いです。

よろしく。

4

1 に答える 1

4

コードがすべての COM 参照を解放していません (たとえば、決して解放されないオブジェクトxlApp.Workbooks.Addへの参照が作成されています)。したがって、この KB 記事Workbooksで説明されているように、Excel インスタンスは閉じず、多数の StackOverflow の質問で詳細に説明されています。

クライアントからの ping がしばらくないことを COM が検出すると、プロセスが終了した後、Excel インスタンスは最終的にシャットダウンします。

于 2012-08-24T13:42:42.430 に答える