2010-03-09
VBでExcelファイルを扱う時の注意
ソースコード
Imports Excel = Microsoft.Office.Interop.Excel '…省略 Dim oExcel As Excel.ApplicationClass = New Excel.ApplicationClass 'WorkBookオブジェクト Dim oBook As Excel.WorkbookClass Dim oSheet As Excel.Worksheet oBook = CType(oExcel.Workbooks.Add(), Excel.WorkbookClass) oSheet = CType(oBook.Worksheets(1), Excel.Worksheet) Try 'A1, B1に数値を設定 oSheet.Cells(1, 1) = 2 oSheet.Cells(1, 2) = 3 '…とかなんとかしてExcelファイルを作る。 'SaveFileDialog生成 Dim saveFileDialog1 As SaveFileDialog = New SaveFileDialog() saveFileDialog1.Title = "保存先選択" 'デフォルト保存先ディレクトリ saveFileDialog1.InitialDirectory = Application.StartupPath 'ファイル名 saveFileDialog1.FileName = "ファイル名.xls" 'フィルタ saveFileDialog1.Filter = "Excelファイル (*.xls)|*.xsl" If saveFileDialog1.ShowDialog() = DialogResult.OK Then oBook.SaveAs(saveFileDialog1.FileName, Excel.XlFileFormat.xlExcel8) End If Catch ex As Exception MessageBox.Show(ex.Message, "エラー", MessageBoxButtons.OK) Finally oBook.Close(False) System.Runtime.InteropServices.Marshal.ReleaseComObject(oBook) oBook = Nothing oExcel.Quit() System.Runtime.InteropServices.Marshal.ReleaseComObject(oExcel) oExcel = Nothing End Try
大事なのはここ
oBook.Close(False) System.Runtime.InteropServices.Marshal.FinalReleaseComObject(oBook) oBook = Nothing oExcel.Quit() System.Runtime.InteropServices.Marshal.FinalReleaseComObject(oExcel) oExcel = Nothing
VB.netでExcelファイルを扱いたくてCOMオブジェクトを利用する場合、COMオブジェクトは明示的に開放してやらないと、タスクにExcelが残ったままになる。
COMオブジェクトの仕組み
COMオブジェクトには、参照カウントという仕組みがある。
参照カウントは、COMオブジェクトを参照しているオブジェクト数を表わしていて、以下のタイミングで増減する。
COMオブジェクトの生成は、通常のオブジェクトと同じ方法で生成することができる(参照カウントを意識する必要はない)
が、オブジェクトの開放は以下のメソッドを利用して明示的に行わなければならない。
System.Runtime.InteropServices.Marshal.FinalReleaseComObject
通常のオブジェクト同様、COMのラッパーオブジェクトの参照がなくなれば、GCを実行して解放することができるが、オブジェクトを即時に解放できるわけではないので注意。あくまで解放し忘れている場合の保険。
COMオブジェクトを利用する場合、参照したものをすべて変数に格納しておく必要がある。
補足
トラックバック - http://d.hatena.ne.jp/Nazo-K/20100309/1268128397
リンク元
- 23 http://37review.com/ka/imac/1/
- 9 http://www.google.co.jp/search?sourceid=navclient&hl=ja&ie=UTF-8&rlz=1T4GGIH_jaJP215JP215&q=Web+管理ツール+起動
- 3 http://cgi.search.biglobe.ne.jp/cgi-bin/search?q=IE6+style.visibility+セレクトボックス+&ie=utf8&num=10&start=0
- 3 http://www.google.co.jp/search?hl=ja&client=firefox-a&rls=org.mozilla:ja:official&q=asp.net+マスターページ+javascript&lr=&aq=0&aqi=g1&aql=&oq=asp.net+マスターペ??%
- 3 http://www.google.co.jp/search?hl=ja&source=hp&q=asp.net+多重クリック&lr=lang_ja&aq=f&aqi=&aql=&oq=&gs_rfai=
- 3 http://www.google.com/search?hl=ja&lr=lang_ja&ie=UTF-8&oe=UTF-8&q=ByVal+page+As+System.Web.UI.Page&num=50
- 2 http://d.hatena.ne.jp/keyword/Interop
- 2 http://ezsch.ezweb.ne.jp/search/?query=imac++電源が入らない+++カリカリ音&start-index=17&adpage=4&ct=2097152&sr=0000&t=20100330234729
- 2 http://www.google.co.jp/m/search?ie=sjis&source=dmt&guid=on&q=imac+購入
- 2 http://www.google.co.jp/search?hl=ja&client=safari&rls=en&q=iMac+茵????&start=10&sa=N
