Microsoft.Office.Interop.Excel.Application.Quit() がバックグラウンド プロセスを実行したままにするのはなぜですか? 質問する

Microsoft.Office.Interop.Excel.Application.Quit() がバックグラウンド プロセスを実行したままにするのはなぜですか? 質問する

次のコードは、プログラムが終了するまで Microsoft Excel のバックグラウンド プロセスを実行したままにします。

var excelApplication = new Application();
var workbooks = excelApplication.Workbooks;
var workbook = excelApplication.Workbooks.Open(file.FullName);

workbook.Close();
excelApplication.Workbooks.Close();
excelApplication.Quit();

Marshal.ReleaseComObject(workbook);
Marshal.ReleaseComObject(workbooks);
Marshal.ReleaseComObject(excelApplication);

なぜですか? 何が足りないのでしょうか?

ベストアンサー1

わかった!

application.Workbooks != application.Workbooks

このプロパティは変数を公開せず、値を生成します。そのため、Workbooks プロパティにアクセスするたびに新しい COM オブジェクトが作成されます。

コードを修正したらすべてうまくいきました。皆さん、ありがとう。

var excelApplication = new Application();
var workbooks = excelApplication.Workbooks;
var workbook = workbooks.Open(pathToExcelWorkbook); // Fixed

workbook.Close();
workbooks.Close();
excelApplication.Quit();

Marshal.ReleaseComObject(workbook);
Marshal.ReleaseComObject(workbooks);
Marshal.ReleaseComObject(excelApplication);

おすすめ記事