掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
Excelのロセスを終了する方法は?? (ID:115355)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
> なにか間違っているのでしょうか?? 正しくコーディングされていれば、最後の Marshal.ReleaseComObject(oExcel) を 実行した時点で、Excelのプロセスが消えるはずです。それで消えないなら、 他にも「ReleasComObjectしていないオブジェクト」があるのだと思います。 # .NETとCOMではメモリ管理方法に違いがあるので、.NETからCOMを # 呼ぶ場合には、すべてのCOMオブジェクトを Marshal.ReleaseComObjectで # 明示的に解放する必要があります。 たとえば… oExcel.Visible = True oBook = oExcel.Workbooks.Open("C:\Book1.xls") MessageBox.Show("開きました。") oBook.Close(False) System.Runtime.InteropServices.Marshal.ReleaseComObject(oBook) oBook = Nothing oExcel.Quit() System.Runtime.InteropServices.Marshal.ReleaseComObject(oExcel) oExcel = Nothing のようなコードの場合、 「Excel.Application」オブジェクト (変数 oExcel) 「Excel.Workbook」オブジェクト (変数 oBook) は解放されていますが、 「Excel.Workbooks」オブジェクト が解放されていないため、プロセスが残ってしまいます。 このコードの場合、Workbooksも解放すればプロセスは残りません。 oExcel.Visible = True oBooks = oExcel.Workbooks oBook = oBooks.Open("C:\Book1.xls") MessageBox.Show("開きました。") System.Runtime.InteropServices.Marshal.ReleaseComObject(oBooks) oBook.Close(False) System.Runtime.InteropServices.Marshal.ReleaseComObject(oBook) oBook = Nothing oExcel.Quit() System.Runtime.InteropServices.Marshal.ReleaseComObject(oExcel) oExcel = Nothing 他のオブジェクト(WorksheetsやRangeなど)についても、解放し忘れている 物が無いか、よく探して見てください。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.