C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: VB.NETでのExcel参照について


(過去ログ 104 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■62043 / inTopicNo.1)  VB.NETでのExcel参照について
  
□投稿者/ 吉田 (1回)-(2011/09/16(Fri) 15:28:44)

分類:[.NET 全般] 

いつもお世話になっております。

VB.NET 2003+WEBアプリケーションにて
Excelファイルを参照しているのですが
『Excel.exe』がプロセスに残り続けてしまう問題で悩んでいます

プログラムは以下のように作成しているのですが
[Cellデータの取得]の部分(■〜■の間)をコメントアウトして動かした場合は
最後の(xlApplication)の解放でプロセス上から消えるのですが
[Cellデータの取得]の部分を動かすと、プロセス上から消えなくなってしまいます

xlRange を使用した場合のみプロセスが残っているという事は
xlRange オブジェクトの解放の仕方が悪いのでしょうか?

================================================================================
        Dim strBUF As String
        Dim xlApplication As Excel.Application
        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

        'エクセルアプリケーションの開始
        xlApplication = CreateObject("Excel.Application")

        'エクセルブックの設定
        xlBooks = xlApplication.Workbooks
        xlBook = xlBooks.Open("C:\Hoge.xls")

        'エクセルシートの設定
        xlSheets = xlBook.Worksheets
        xlSheet = CType(xlSheets(2), Excel.Worksheet)

        '非表示
        xlApplication.Visible = False


        '■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
        '[Cellデータの取得]
        xlRange = CType(xlSheet.Cells(1, 1), Excel.Range)
        strBUF = xlRange.Text
        Label1.Text = strBUF
        '■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■


        'Rangeオブジェクトの開放
        System.Runtime.InteropServices.Marshal.ReleaseComObject(xlRange)

        'Sheetオブジェクトの開放
        System.Runtime.InteropServices.Marshal.ReleaseComObject(xlSheets)
        xlSheets = Nothing
        System.Runtime.InteropServices.Marshal.ReleaseComObject(xlSheet)
        xlSheet = Nothing

        'Bookオブジェクトの開放
        xlBook.Close(False)
        System.Runtime.InteropServices.Marshal.ReleaseComObject(xlBook)
        xlBook = Nothing
        System.Runtime.InteropServices.Marshal.ReleaseComObject(xlBooks)
        xlBooks = Nothing

        'Excelの終了
        xlApplication.Quit()
        System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApplication)
        xlApplication = Nothing

================================================================================






引用返信 編集キー/
■62049 / inTopicNo.2)  Re[1]: VB.NETでのExcel参照について
□投稿者/ くだん (9回)-(2011/09/16(Fri) 16:54:17)
2011/09/16(Fri) 16:55:40 編集(投稿者)

No62043 (吉田 さん) に返信
> xlRange オブジェクトの解放の仕方が悪いのでしょうか?
参照カウンタ増やしたり減らしたりするだけの作業に
良いも悪いもないわけで、プロセスが残る原因は1つしか
ありません。解放してないオブジェクトがあるのです。

Cells が怪しいのじゃないですか?最後に複数形の s ついてるから。

xlRange = xlSheet.Range("$A$1")
とか
xlTempRange = CType(xlSheet.Cells, Excel.Range)
xlRange = CType(xlTempRange.Item(1, 1), Excel.Range)
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlTempRange)
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlRange)

にした結果はどうでしょうか?

引用返信 編集キー/
■62051 / inTopicNo.3)  Re[2]: VB.NETでのExcel参照について
□投稿者/ 吉田 (2回)-(2011/09/16(Fri) 17:38:35)
No62049 (くだん さん) に返信
> 2011/09/16(Fri) 16:55:40 編集(投稿者)

くだん様
ご指摘の通りに修正したところ、プロセスが消える事が確認できました
大変助かりました、有難うございました。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -