タイトル | : Excelプロセス |
記事No | : 1589 |
投稿日 | : 2005/04/21(Thu) 09:56 |
投稿者 | : BNR32 |
はじめて投稿します。
.NET VBからExcelが終了しません。 他のサイト等も調べたのですが、シート名を表示(行11〜13)したら、どのオブジェクト を解放してよいかなかったので、投稿させて頂きました。
行11〜13をコメントにすると、Excelプロセスは残りません。 以下に開発環境とソースを記載します。
よろしくご教授お願いします。
開発環境 [OS]:Windows XP Professional [VB]:VB.NET 2003 [Office]:Office 2000
1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 2 3 Dim xlFilePath As String = "c:\Test1.xls" '保存ファイル名 4 Dim i As Integer 5 6 xlApp = New Excel.Application 7 xlBooks = xlApp.Workbooks 8 xlBook = xlBooks.Open(xlFilePath) 9 10 xlSheets = xlBook.Worksheets 11 For i = 1 To xlBook.Sheets.Count() 12 Console.WriteLine(xlSheets.Item(i).Name) 'シート名 表示 13 Next i 14 15 'セルの値を取得 16 Console.WriteLine(CeGetCell(6, 3)) 17 18 'オブジェクトの解放 19 System.Runtime.InteropServices.Marshal.ReleaseComObject(xlSheet) 20 System.Runtime.InteropServices.Marshal.ReleaseComObject(xlSheets) 21 xlBook.Close(False) 22 System.Runtime.InteropServices.Marshal.ReleaseComObject(xlBook) 23 System.Runtime.InteropServices.Marshal.ReleaseComObject(xlBooks) 24 xlApp.Quit() 25 System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApp) 26 27 'ガベージ 28 System.GC.Collect() 29 30 End Sub 31 32 Private Function CeGetCell(ByVal nRow As Integer, ByVal nCol As Integer) As String 33 Dim sRtnStr As String = "" 34 Dim xlCells As Excel.Range 35 Dim xlRange As Excel.Range 36 37 xlCells = xlSheet.Cells 38 xlRange = xlCells(nRow, nCol) 39 40 If xlRange.Value <> vbNullString Then 41 sRtnStr = xlRange.Value 42 End If 43 44 'オブジェクトの開放 45 System.Runtime.InteropServices.Marshal.ReleaseComObject(xlRange) 46 System.Runtime.InteropServices.Marshal.ReleaseComObject(xlCells) 47 48 Return Trim(sRtnStr) 49 End Function
|