我使用interop.excel創建了一個excel文件,並且進程未關閉。 這是我正在嘗試使用的代碼。Excel進程不在VB.net中關閉
Private Sub converToExcel(fileLoc As String, ds As DataSet)
Dim xlApp As Excel.Application
Dim xlWorkBook As Excel.Workbook
Dim xlWorkBooks As Excel.Workbooks
Dim xlWorkSheet As Excel.Worksheet
Dim misValue As Object = System.Reflection.Missing.Value
Dim i As Integer
Dim j As Integer
xlApp = New Excel.Application
xlWorkBooks = xlApp.Workbooks
xlWorkBook = xlWorkBooks.Add(misValue)
xlWorkSheet = xlWorkBook.Sheets("sheet1")
For i = 0 To ds.Tables(0).Rows.Count - 1
For j = 0 To ds.Tables(0).Columns.Count - 1
xlWorkSheet.Columns.NumberFormat = "@"
xlWorkSheet.Cells(i + 1, j + 1) = String.Format("{0}", ds.Tables(0).Rows(i).Item(j).ToString())
Next
Next
xlWorkSheet.SaveAs(fileLoc)
xlWorkBook.Close()
xlApp.Quit()
releaseObject(xlWorkSheet)
releaseObject(xlWorkBook)
releaseObject(xlWorkBooks)
releaseObject(xlApp)
End Sub
Private Sub releaseObject(ByVal obj As Object)
Try
System.Runtime.InteropServices.Marshal.ReleaseComObject(obj)
obj = Nothing
Catch ex As Exception
obj = Nothing
Finally
GC.Collect()
End Try
End Sub
我想我錯過了一個COM對象,但似乎找不到解決方案。 此外,作爲一個說明,這是在64位Windows 8上運行。 任何幫助將是偉大的! 謝謝
你確信這是不是從以前的測試留下了一個實例? – Fionnuala
是的,我在每次測試後檢查任務管理器並刪除所有excel實例。 – jmcsmith
我不認爲這是你的問題的原因,但'releaseObject'可能不會做你想象的那樣。由於你傳遞'obj'' ByVal','obj = Nothing'對'xlWorkSheet','xlWorkBook'等變量沒有任何影響。 – prprcupofcoffee