次のコードは、プログラムが終了するまで 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);