我在後臺離開excel殭屍進程的程序出現問題。我已經遵循了所有的建議和例子,以及試圖避免這種情況的MSDN,但這讓我感到非常緊張。任何人都可以發現是什麼導致殭屍進程發生?(另一種).net Excel殭屍問題
Imports System
Imports System.Collections
Imports System.IO
Imports Excel = Microsoft.Office.Interop.Excel
私人小組LoadExcelButton_Click(BYVAL發件人爲System.Object的,BYVALË作爲System.EventArgs)把手LoadExcelButton.Click
Dim xlApp As New Excel.Application
Dim xlBook As Excel.Workbook = Nothing 'instantiated to nothing to help try and avoid zombies
Dim xlSheet As Excel.Worksheet = Nothing
Dim STFRange As Excel.Range = Nothing
Dim Name As String, Easting As Integer, Northing As Integer, tDSpa As Double, Type As String
Dim NumberSTF As Integer, NumberProperties As Integer, i As Integer, ExcelPath As String
ExcelPath = Me.ExcelPathTextBox.Text.ToString
If File.Exists(ExcelPath) = False Then
MessageBox.Show("Excel file does not exist, exiting.")
Exit Sub
End If
Try
xlApp.Visible = False
xlBook = xlApp.Workbooks.Open(ExcelPath) ', , [ReadOnly]:=True
xlSheet = xlBook.Sheets("STF")
NumberSTF = xlSheet.UsedRange.Rows.Count - 1 '-1 to account for header
NumberProperties = xlSheet.UsedRange.Columns.Count
'create a new collection
'http://msdn.microsoft.com/en-us/library/xth2y6ft(v=vs.71).aspx
Dim mySTFCollection As New STFCollection
For i = 1 To NumberSTF 'rather than a for each loop which would require more excel ranges
STFRange = xlSheet.Cells(i + 1, 1) '+1 on row to account for header
Name = STFRange.Value.ToString
STFRange = xlSheet.Cells(i + 1, 2)
Easting = CInt(STFRange.Value)
STFRange = xlSheet.Cells(i + 1, 3)
Northing = CInt(STFRange.Value)
STFRange = xlSheet.Cells(i + 1, 4)
tDSpa = CDbl(STFRange.Value)
STFRange = xlSheet.Cells(i + 1, 5)
Type = STFRange.Value.ToString
Dim objSTF As New STF(Name, Easting, Northing, tDSpa, Type)
mySTFCollection.Add(objSTF)
Next i
GC.Collect()
GC.WaitForPendingFinalizers()
GC.Collect()
GC.WaitForPendingFinalizers()
ReleaseObject(STFRange)
STFRange = Nothing
ReleaseObject(xlSheet)
xlSheet = Nothing
xlBook.Close(True, ,)
ReleaseObject(xlBook)
xlBook = Nothing
xlApp.Quit()
ReleaseObject(xlApp)
xlApp = Nothing
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
End Sub
Public Sub ReleaseObject(ByVal obj As Object)
Try
Marshal.ReleaseComObject(obj)
obj = Nothing
Catch ex As Exception
obj = Nothing
Finally
GC.Collect()
End Try
End Sub
無法完成。你沒有按照它的意圖使用excel。 Excel是一個桌面應用程序,互操作是這種怪癖的獎金。這就是爲什麼MSDN建議避免它,而不是因爲他們是一羣混蛋:p – banging 2012-08-17 19:42:24
這一定是可能的,我不敢相信。我已經在VBA中完成了從ESRI ArcGIS到Excel的工作,但是無法從VB.net開始工作 – sarkyscouser 2012-09-10 12:50:22