Ich habe zuvor schwebende EXCEL.EXE-Dateien aufgelöst, indem Sie das Arbeitsblatt, die Arbeitsmappe und die Anwendungsobjekte von EXCEL freigegeben haben. Allerdings habe ich bemerkt, dass nach dem Verweis auf Zellbereiche, dass diese EXE-Datei zurückkommt.Floating EXCEL.EXE verursacht durch referenzierte Zellen in vb.net
Ich habe den Abschnitt auskommentiert, wo ich diese Zellen referenziere und das ist in der Tat, was vor sich geht. Ich habe versucht, die Zelle selbst und die Reichweite der Zelle freizugeben, aber das funktioniert nicht.
Ich weiß, dass dies eine wiederholte Frage sein kann, aber es ist etwas, was ich wirklich mit Verständnis habe.
Dim app As New Microsoft.Office.Interop.Excel.Application
Dim book As Microsoft.Office.Interop.Excel.Workbook = app.Workbooks.Open(file)
Dim worksheet As Microsoft.Office.Interop.Excel.Worksheet = book.Worksheets("Sheet1")
app.Visible = True
While (worksheet.Cells.Range("A" & max_row).Value IsNot Nothing)
max_row = max_row + 1
End While
If max_row > 2 Or max_row = 2 Then
For i As Integer = 2 To max_row Step 1
MessageBox.Show("here")
Dim add As DataRow = Me.CentralDatabaseDataSet.Selected_Equipment.NewRow
If "Section " & worksheet.Cells.Range("J" & i).Text = cboSection.SelectedItem.ToString Then
add("Type") = worksheet.Cells.Range("A" & i).Text
ReleaseObject(worksheet.Cells(i, 1))
'add("Description") = worksheet.Cells.Range("B" & i).Text
'add("Model Number") = worksheet.Cells.Range("C" & i).Text
'add("Serial Number") = worksheet.Cells.Range("D" & i).Text
'add("Asset Number") = worksheet.Cells.Range("E" & i).Text
'add("Manufacturer ID") = worksheet.Cells.Range("F" & i).Text
'add("Department ID") = worksheet.Cells.Range("G" & i).Text
'add("Last Calibration") = worksheet.Cells.Range("H" & i).Text
'add("Calibration Due Date") = worksheet.Cells.Range("I" & i).Text
'Me.CentralDatabaseDataSet.Selected_Equipment.AddSelected_EquipmentRow(add)
End If
Next
End If
book.Close()
app.Quit()
ReleaseObject(worksheet)
ReleaseObject(book)
ReleaseObject(app)
Es gibt eine Menge Dinge, die [hier], um zu versuchen (http://stackoverflow.com/questions/158706/how-to-properly-clean-up-excel -Interop-Objekte). Persönlich würde ich das [Open XML SDK] (https://msdn.microsoft.com/en-us/library/office/bb448854.aspx) mit einem der verfügbaren Wrapper verwenden (zB [ClosedXML] (http: // closedxml .codeplex.com /), [EPPlus] (http://epplus.codeplex.com/), [SpreadsheetLight] (http://spreadsheetlight.com/)) und sich nicht um all diese COM-Interop-Probleme kümmern. – Mark
Vielen Dank für die Antwort. Ich arbeite an der Anwendung der Lösungen, die in Ihrem Link geben, aber es gibt nichts speziell für meinen Fall. Wenn ich es herausfinde, werde ich meine neue Lösung veröffentlichen. –
Ich würde denken, dass viele der Antworten speziell für Ihren Fall gelten - "Nie 2 Punkte mit com-Objekten verwenden" ist ein häufiges Thema, und es gibt viele Beispiele in Ihrem Code, wo Sie mehrere Punkte beim Aufruf der COM-Objekte - z. In 'worksheet.Cells.Range (" J "& i) .Text" befreien Sie nicht die Objekte, die von 'Cells' und' Range' zurückgegeben werden. Sie könnten versuchen, die Aufrufe 'GC.Collect()' und 'GC.WaitForPendingFinalizers()' hinzuzufügen und zu sehen, ob das hilft (vielleicht sogar zweimal aufrufen, wie einige vorschlagen). – Mark