Excelのプロセスが消えない

タグの編集
投稿者 たらちゃん  (社会人) 投稿日時 2009/1/18 05:37:27
お世話になります。
VB.netで以下のような流れのプログラムを作成しました。
1.csvファイルをデータセットに格納し、データグリッドに表示
2.データグリッドに表示したデータをExcelに出力

しかしExcelへの出力が完了してもExcelのプロセスが残ったままです。
このHPにあるVB6テクニックで解説してある「消えないExcelのプロセス」の箇所も読み、
その通りにExcelアプリケーションは終了しているはずなのですが・・・

どなたか原因をご教示いただけると幸いです。

※以下に参考までにコードの一部を抜粋します
(oledvはcsvファイルから読み込んだデータセットから生成したデータビューです。またExcelを
参照設定しています。)

        '-------------
        'Excelに接続
        '-------------

        Dim xlApp As Excel.Application
        Dim xlBook As Excel.Workbook
        Dim xlSheet As Excel.Worksheet

        'Excelの起動
        xlApp = CreateObject("Excel.application")
        '新規Excelファイルを作成する
        xlBook = xlApp.Workbooks.Add
        'データを出力するワークシートをSheet1にする
        xlSheet = xlBook.Worksheets(1)
        'Excelを非表示にする
        xlApp.Visible = False

        '-------------------------
        'DataSet抽出結果を出力する
        '-------------------------
        Me.ProgressBar1.Minimum = 0
        Me.ProgressBar1.Maximum = oledv.Count - 1

        Dim i As Integer
        For i = 0 To oledv.Count - 1
            xlSheet.Cells(i + 1, 1).value = "会社名"
            xlSheet.Cells(i + 1, 2).value = "住所"
            xlSheet.Cells(i + 1, 3).value = "県名"
            xlSheet.Cells(i + 2, 1).value = oledv(i)(1)    '会社名
            xlSheet.Cells(i + 2, 2).value = oledv(i)(5) '住所
            xlSheet.Cells(i + 2, 3).value = oledv(i)(10) '県
            Me.ProgressBar1.Value = i
        Next

        xlBook.SaveAs(Microsoft.VisualBasic.Left(myfilepath, Len(myfilepath) - 4) & "_修正")
        xlBook.Close()
        xlApp.Quit()

        xlSheet = Nothing
        xlBook = Nothing
        xlApp = Nothing

        '処理終了メッセージ
        MsgBox("ファイルの加工を終了しました")
        Me.ProgressBar1.Value = 0

    End Sub
投稿者 かずき  (社会人) 投稿日時 2009/1/18 06:01:19
ここらへんを参考にしてみてください。
http://jeanne.wankuma.com/tips/csharp/programming/releasecom.html
投稿者 るしぇ  (社会人) 投稿日時 2009/1/18 16:00:29
花ちゃんのサイトとかね。
http://hanatyan.sakura.ne.jp/dotnet/Excel08.htm

VB6のテクニックは通用しません。このサイトでもちょこっと
情報は載ってます。
Visual Basic 中学校 > 初級講座 > 第44回 周辺にあるテクノロジ
http://homepage1.nifty.com/rucio/main/dotnet/shokyu/standard44.htm
> 発展学習  -  COMオブジェクトの開放
> この開放作業は必須ではありません(それに面倒なので私が個人的にやりたくありません
wwwまぁ、中学校レベルならいいのかな(^^;

かずきさんご紹介のページにも載っている通り、
ReleaseComObject を Excel のオブジェクトを1つ
使うごとに実行する必要があります。

その際、命令の右辺および左辺でピリオド(.)が2個
あったらアウトと思ってください。
> xlSheet.Cells(i + 1, 1).value 
xlSheet.Cells(i + 1, 1) という指定で Excel.Range
オブジェクトが使われるので、ここを2段階に分ける
必要があります。
更に使用した Excel.Range を ReleaseComObject して
ください。
投稿者 たらちゃん  (社会人) 投稿日時 2009/1/18 18:26:42
るしぇさん、かずきさん、ご回答いただきありがとうございます。
COMオブジェクトの開放を付加したところ問題なくプロセスが終了しました。
大変勉強になりました。
どうもありがとうございました。