サイトアイコン 成功者への道

【VB.NET】VB.NETからExcelファイルを操作するには

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

 

モバイルバージョンを終了