トップ回答者
VB.NETでExcelを開きたいのですが。

質問
-
初めまして。
VB.NET初心者で初めての質問です。
よろしくお願いします。
VB.NETでExcelを開きたいのですが、最初このようにしたら:
Dim oExcelApp As Excel.Application = Nothing
Dim oWorkbook As Excel.Workbook = Nothing
Try
oWorkbook = oExcelApp.Workbooks.Open(strFilePath, , False)
Catch ex As Exception
MsgBox("Error")
Return
End TryOpenのときにoExcelApp とoWorkbook がNothingで、ExceptionとなりMsgBoxが出ます。
そこで、このように変えてみました:
Dim oExcelApp As Excel.Application
oExcelApp = CType(CreateObject("Excel.Application"), Excel.Application)
Dim oWorkbook As Excel.Workbook = oExcelApp.Workbooks.Add
Try
oWorkbook = CType(CreateObject("Excel.Workbook"), Excel.Workbook)
Catch ex As Exception
MsgBox("Error")
Return
End Try今度は、Addの時にデバッガーが”メンバが見つかりません。”というエラーを出します。
本当は、次のように New を使いたいところですが:
Dim oExcelApp As New Excel.Application
そもそもこのような行が入れられません。(VBの編集ウィンドウに New cannot be used on an interface というバルーンメッセージが出ます。)
何か良い方法はありませんでしょうか?
また、私の方でとんでもなく間違ったことをしているのでしょうか?
ご意見、よろしくお願いいたします。
marupi
回答
-
marupi さんからの引用 oWorkbook = oExcelApp.Workbooks.Open(strFilePath, , False)
ここ、Workbooks の参照を取り忘れていますね。
これでは参照カウントをデクリメントすることができません。http://jeanne.wankuma.com/tips/vb.net/programming/releasecom.html
相性の悪い .NET から Excel (COM) をどうこうするのはやめた方が良いです。
COM 専用の言語で処理を作りこんで .NET から呼び出すか、ScriptControl を使った方が良いですね。 -
marupi さん
以下のようにしたらどうでしょう。Dim oExcelApp As New Excel.Application
Dim oWorkbooks As Excel.Workbooks = oExcelApp.Workbooks
Dim oWorkbook As Excel.Workbook
Dim oSheets As Excel.Sheets
Dim oSheet As Excel.Worksheet
Dim strFilePath As String = "ほげほげ.xls"Try
oWorkbook = oWorkbooks.Open(strFilePath)
oSheets = oWorkbook.Worksheets
oSheet = oSheets.Item(1) '例えば最初のシート
oExcelApp.Visible = True '試しにEXCELを表示する
Catch ex As ExceptionMsgBox("Error")
End Try
すべての返信
-
marupi さんからの引用 oWorkbook = oExcelApp.Workbooks.Open(strFilePath, , False)
ここ、Workbooks の参照を取り忘れていますね。
これでは参照カウントをデクリメントすることができません。http://jeanne.wankuma.com/tips/vb.net/programming/releasecom.html
相性の悪い .NET から Excel (COM) をどうこうするのはやめた方が良いです。
COM 専用の言語で処理を作りこんで .NET から呼び出すか、ScriptControl を使った方が良いですね。 -
marupi さん
以下のようにしたらどうでしょう。Dim oExcelApp As New Excel.Application
Dim oWorkbooks As Excel.Workbooks = oExcelApp.Workbooks
Dim oWorkbook As Excel.Workbook
Dim oSheets As Excel.Sheets
Dim oSheet As Excel.Worksheet
Dim strFilePath As String = "ほげほげ.xls"Try
oWorkbook = oWorkbooks.Open(strFilePath)
oSheets = oWorkbook.Worksheets
oSheet = oSheets.Item(1) '例えば最初のシート
oExcelApp.Visible = True '試しにEXCELを表示する
Catch ex As ExceptionMsgBox("Error")
End Try