VB.NETからExcelファイルにデータを書き込んだり、
その逆にExcelファイルからデータを取得することでアプリケーションの幅が広がります。
DBを用意しなくてもExcelをDBと見立ててアプリケーションの作成なんかもできてしまいます。
でも、意外に検索しても出て来ないんですよね、、、C#ばっかり。。。
なのでここでは、その方法をお伝えします。
Excelの既存ファイルを開く
Dim xlApplication As New Excel.Application()
Dim xlBooks As Excel.Workbooks xlBooks = xlApplication.Workbooks
'既存のブックを開く
xlBooks.Open("C:\Hoge.xls")
'Excelを非表示にする
xlApplication.Visible = False
Exelを新規ファイルで開く
Dim xlBooks As Excel.Workbooks
Dim xlBook As Excel.Workbook
Dim xlSheets As Excel.Sheets
Dim xlSheet As Excel.Worksheet
Dim xlRange As Excel.Range
Dim xlApp As Excel.Application
xlApp = CreateObject("Excel.Application")
xlApp.Visible = True
'Excelから読み込み
xlBooks = xlApp.Workbooks
'Excelの非可視化
xlApp.Visible = False
'新規のファイルを開く
xlBook = xlBooks.Add()
xlSheets = xlBook.Worksheets
xlSheet = DirectCast(xlSheets.Item(1), Excel.Worksheet)
ExcelのCOMObjectを解放する部品
引数に解放したいもの(SheetやRange)を入れてください。
解放する時は作成した順と逆に解放することがポイントです。
そうしないと、プロセスにEXCELが大量に作成され続けてしまいます。
作成順
Dim xlBooks As Excel.Workbooks
Dim xlBook As Excel.Workbook
Dim xlSheets As Excel.Sheets
Dim xlSheet As Excel.Worksheet
解放
ReleaseCOMObject(xlSheet)
ReleaseCOMObject(xlSheets) xlBook.Close()
ReleaseCOMObject(xlBook)
ReleaseCOMObject(xlBooks)
'COMオブジェクトの解放
Private Shared Sub ReleaseCOMObject(Of T As Class)(ByRef objCom As T)
'オブジェクトが空の場合処理を抜ける
If objCom Is Nothing Then
Return
End If
Try
'パラメタがCOMオブジェクトかチェック
If System.Runtime.InteropServices.Marshal.IsComObject(objCom) Then
'Runtime Callable Wrapperの解放を行う
Dim cntRCW As Integer = System.Runtime.InteropServices.Marshal.FinalReleaseComObject(objCom)
If cntRCW <> 0 Then
'解放しきれていない場合、メッセージを出力
MessageBox.Show("解放エラー")
End If
End If
Finally
objCom = Nothing
End Try
End Sub