我使用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