VB.NETで作成したアプリケーションとは、別のプロセスで実行されているExcelで開いているファイルの情報を取得する方法について説明します。
この方法は、既に開いているExcelのファイル名やシート名、セルの値等を取得したい場合に利用できます。
Excelは、COMコンポーネントによって提供されるオブジェクトのため、GetObject()関数を利用して参照します。
Excelオブジェクトを参照した後は、VB.NETからExcelを操作する方法と変わりません。
以下、サンプル。
この方法は、既に開いているExcelのファイル名やシート名、セルの値等を取得したい場合に利用できます。
Excelは、COMコンポーネントによって提供されるオブジェクトのため、GetObject()関数を利用して参照します。
Excelオブジェクトを参照した後は、VB.NETからExcelを操作する方法と変わりません。
以下、サンプル。
《事前準備》
1.Windowsアプリケーションを新規に作成する。
2.フォームに以下のコントロールを配置する。
・リッチテキストボックス(RichTextBox)
・ボタン(Button)
→コントロール名はデフォルトのままとします。
《コード》
上記のサンプルの動作の確認手順は、以下の通りです。
1.Excelを起動する。
→適当なExcelファイルを開くことでもOKです。
2.上記のプログラムを実行する。
3.プログラムのボタンを押す。
上記の操作を行うと、開いているExcelファイルのファイル名とシート名がリッチテキストボックスに表示されます。
【補足事項】
・GetObject()関数の引数には、ファイルパスを指定することもできます。
・GetObject()関数を利用してExcelを参照する場合には、ExcelオブジェクトのQuit()メソッドは実行する必要はありません。
→別プロセスとして実行しているので、強制的に閉じる必要がないためです。
・上記のサンプルでは、どのファイルを開いているか分からない状態でも情報が取得できるようにオブジェクトのクラス名を取得しています。
・VB.NETからExcelを操作する方法の関連記事は、以下の通りです。
・【VB.NET】COMオブジェクトの解放
・【VB.NET】Excelの印刷ページ数を取得する
【参考サイト】
・@IT会議室(Insider.NET 会議室)
VB.NETですでに開いているEXCELの操作
・MSDNライブラリ(Visual Basic 言語リファレンス)
GetObject関数(Visual Basic)
1.Windowsアプリケーションを新規に作成する。
2.フォームに以下のコントロールを配置する。
・リッチテキストボックス(RichTextBox)
・ボタン(Button)
→コントロール名はデフォルトのままとします。
《コード》
Imports Excel = Microsoft.Office.Interop.Excel
Public Class Form1
Private Sub Button1_Click( _
ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button1.Click
RichTextBox1.Clear()
Dim oExcel As Excel.Application
Dim oBooks As Excel.Workbooks
Dim oBook As Excel.Workbook
Try
'別プロセスのExcelを取得する
'第1引数のファイルパスは省略する
oExcel = GetObject(, "Excel.Application")
'開いているブックを全て取得する
oBooks = oExcel.Workbooks
'ブック毎に処理する
For Each oBook In oBooks
RichTextBox1.AppendText( "*** " + oBook.Name + _
" ***" + System.Environment.NewLine)
Dim oSheets As Excel.Sheets
Dim oSheet As Excel.Worksheet
Try
'ブックの全シートを取得する
oSheets = oBook.Worksheets
'シート毎に処理する
For Each oSheet In oSheets
RichTextBox1.AppendText(" " + oSheet.Name + _
System.Environment.NewLine)
Next
Catch ex As Exception
MessageBox.Show(ex.Message)
Finally
'COMコンポーネントの解放
If Not oSheet Is Nothing Then
System.Runtime.InteropServices.Marshal. _
ReleaseComObject(oSheet)
oSheet = Nothing
End If
If Not oSheets Is Nothing Then
System.Runtime.InteropServices.Marshal. _
ReleaseComObject(oSheets)
oSheets = Nothing
End If
End Try
Next
MessageBox.Show("シート名を取得しました", "完了通知")
Catch ex As Exception
MessageBox.Show(ex.Message)
Finally
'COMコンポーネントの解放
If Not oBook Is Nothing Then
System.Runtime.InteropServices.Marshal. _
ReleaseComObject(oBook)
oBook = Nothing
End If
If Not oBooks Is Nothing Then
System.Runtime.InteropServices.Marshal. _
ReleaseComObject(oBooks)
oBooks = Nothing
End If
If Not oExcel Is Nothing Then
System.Runtime.InteropServices.Marshal. _
ReleaseComObject(oExcel)
oExcel = Nothing
End If
End Try
End Sub
End Class
上記のサンプルの動作の確認手順は、以下の通りです。
1.Excelを起動する。
→適当なExcelファイルを開くことでもOKです。
2.上記のプログラムを実行する。
3.プログラムのボタンを押す。
上記の操作を行うと、開いているExcelファイルのファイル名とシート名がリッチテキストボックスに表示されます。
【補足事項】
・GetObject()関数の引数には、ファイルパスを指定することもできます。
・GetObject()関数を利用してExcelを参照する場合には、ExcelオブジェクトのQuit()メソッドは実行する必要はありません。
→別プロセスとして実行しているので、強制的に閉じる必要がないためです。
・上記のサンプルでは、どのファイルを開いているか分からない状態でも情報が取得できるようにオブジェクトのクラス名を取得しています。
・VB.NETからExcelを操作する方法の関連記事は、以下の通りです。
・【VB.NET】COMオブジェクトの解放
・【VB.NET】Excelの印刷ページ数を取得する
【参考サイト】
・@IT会議室(Insider.NET 会議室)
VB.NETですでに開いているEXCELの操作
・MSDNライブラリ(Visual Basic 言語リファレンス)
GetObject関数(Visual Basic)