メソッドに貼り付けるだけで機能するソースコードを多数用意しています。
COM解放のみ
Excelを開いたまま処理を終了させる
Excelが開いた状態でメソッドやアプリを終了しても、プロセスが残らないコードです。
以下の処理を実行すると、Excelの新規Bookが1つ起動します。
処理自体は最後まで流れますが、表示したExcelは開いたままになっており、マウス操作でExcelを閉じてもタスクマネージャにプロセスは残りません。
ポイントは、処理の最後でExcelの終了処理(BOOKやApplicationクラスの終了処理)を行わず、COMオブジェクトの解放のみを行う点です。
// Excel操作用オブジェクト
Microsoft.Office.Interop.Excel.Application xlApp = null;
Microsoft.Office.Interop.Excel.Workbooks xlBooks = null;
Microsoft.Office.Interop.Excel.Workbook xlBook = null;
Microsoft.Office.Interop.Excel.Sheets xlSheets = null;
Microsoft.Office.Interop.Excel.Worksheet xlSheet = null;
// Excelアプリケーション生成
xlApp = new Microsoft.Office.Interop.Excel.Application();
// 新規のExcelブックを開く
// Addメソッド
xlBooks = xlApp.Workbooks;
xlBook = xlBooks.Add();
// シートを選択する
xlSheets = xlBook.Worksheets;
xlSheet = xlSheets[1] as Microsoft.Office.Interop.Excel.Worksheet; // 1シート目を操作対象に設定する
// 表示
xlApp.Visible = true;
// ■■■以下、COMオブジェクトの解放■■■
// Sheet解放
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlSheet);
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlSheets);
// ◆プロセスが残らないようにメソッドを抜けるには、
// ★の部分をコメントアウトする
// Book解放
//xlBook.Close(); //★
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlBook);
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlBooks);
// Excelアプリケーションを解放
//xlApp.Quit(); //★
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApp);