前回の「Excelを扱う(10) WorksheetFunctionオブジェクトをくるんでみた」に引き続き、
一番大元のApplicationです。

あくまで“自分用”にここに置いておきます。

※VB.NETからExcelを操作して、
System.Runtime.InteropServices.Marshal.ReleaseComObject
を使って、Excelプロセスを自力で解放できる人が
あくまで楽をするために作ってます。

コレを使うと、Excelプロセスが残ってしまう可能性はかなり高いです。
(くるんでいる私がヘボだから;大笑)

自力でExcelプロセスが解放出来ない方
System.IDisposableインターフェースをご存じない方
コードを読まずに使おうとする方(まさかいないですよね?)
は使用されないでください。お願いします。
……もしも質問されても情けないけれども私もよく分からないので。(^^ゞ

wrp_applicaitonクラス(安易なネーミング;笑)

実装しているのは

isQuit
Quit
Visible
WindowState
Workbooks
WorksheetFunction
IsDisposed
Dispose
……これだけ。(^^ゞ
(今のところ、コレだけが必要だったのです;爆)

あと、Excel固有の値のラップ
XlWindowState
XlReferenceStyle

固有値のラップ
    Public Enum XlWindowState As Integer
xlMaximized = Excel.XlWindowState.xlMaximized
xlMinimized = Excel.XlWindowState.xlMinimized
xlNormal = Excel.XlWindowState.xlNormal
End Enum

Public Enum XlReferenceStyle As Integer
xlA1 = Excel.XlReferenceStyle.xlA1
xlR1C1 = Excel.XlReferenceStyle.xlR1C1
End Enum


wrp_applicaitonクラス
    Class wrp_applicaiton
Implements System.IDisposable

Dim disposed As Boolean = False
Dim _xlapp As Excel.Application
Dim _quit As Boolean = False
Dim _wstate As Int32
Dim _childs As ArrayList

Sub New()
_xlapp = New Excel.Application
_childs = New ArrayList
End Sub
ReadOnly Property isQuit() As Boolean
Get
Return _quit
End Get
End Property
Overloads Sub Quit()
If disposed Then
Throw New ObjectDisposedException(Me.GetType.ToString, Me.GetType.Name & "は既に破棄されています")
Else
If _quit = False Then
_xlapp.Quit()
Dispose()
End If
_quit = True
End If
End Sub
Overloads Sub Quit(ByVal nothingvar As Boolean)
If disposed Then
Throw New ObjectDisposedException(Me.GetType.ToString, Me.GetType.Name & "は既に破棄されています")
Else
If _quit = False Then
_xlapp.Quit()
If nothingvar Then Dispose()
End If
_quit = True
End If
End Sub
Property Visible() As Boolean
Get
If disposed Then
Throw New ObjectDisposedException(Me.GetType.ToString, Me.GetType.Name & "は既に破棄されています")
Return Nothing
Else
Return _xlapp.Visible
End If
End Get
Set(ByVal Value As Boolean)
If disposed Then
Throw New ObjectDisposedException(Me.GetType.ToString, Me.GetType.Name & "は既に破棄されています")
Else
_xlapp.Visible = Value
End If
End Set
End Property
Property WindowState As XlWindowState
Get
Return _wstate
End Get
Set(ByVal value As XlWindowState)
_wstate = value
End Set
End Property
Public Overridable ReadOnly Property Workbooks() As wrp_workbooks
Get
If disposed Then
Throw New ObjectDisposedException(Me.GetType.ToString, Me.GetType.Name & "は既に破棄されています")
Return Nothing
Else
Dim i As Int32 = _childs.Add(New wrp_workbooks(_xlapp.Workbooks))
Return _childs(i)
End If
End Get
End Property
Public Overridable ReadOnly Property WorksheetFunction() As wrp_worksheetFunction
Get
If disposed Then
Throw New ObjectDisposedException(Me.GetType.ToString, Me.GetType.Name & "は既に破棄されています")
Return Nothing
Else
Dim i As Int32 = _childs.Add(New wrp_worksheetFunction(_xlapp.WorksheetFunction))
Return _childs(i)
End If
End Get
End Property
Public Function IsDisposed() As Boolean
Return disposed
End Function
Public Overloads Sub Dispose() Implements System.IDisposable.Dispose
Dispose(True)
GC.SuppressFinalize(Me)
End Sub
Private Overloads Sub Dispose(ByVal disposing As Boolean)
If Me.disposed = False Then
If disposing Then
End If
Dim i As Int32, count As Int32 = _childs.Count - 1
For i = 0 To count
If _childs(i).isDisposed = False Then _childs(i).Dispose()
Next i
_childs.Clear()
System.Runtime.InteropServices.Marshal.ReleaseComObject(_xlapp)
_xlapp = Nothing
End If
disposed = True
End Sub
Protected Overrides Sub Finalize()
Dispose(False)
MyBase.Finalize()
End Sub
End Class


これで一通り、読み取りに使いそうなExcelラッパーのラッパー(ややこしい)が作り終わりました。


「Excelを扱う」関連記事内リンク

Excelを扱う時
Excelを扱う時(2)
Excelを扱う(3) com解放作業がめんどーなら、ラッパーで対応してしまえっ
Excelを扱う(4) System.IDisposableインターフェースを使ってみた
Excelを扱う(5) Rangeオブジェクトをくるんでみた
Excelを扱う(6) Worksheetオブジェクトをくるんでみた
Excelを扱う(7) Worksheetsオブジェクトをくるんでみた
Excelを扱う(8) Workbookオブジェクトをくるんでみた
Excelを扱う(9) Workbooksオブジェクトをくるんでみた
Excelを扱う(10) WorksheetFunctionオブジェクトをくるんでみた
Excelを扱う(11) Applicationオブジェクトをくるんでみた