Nicht schließen Sie das Excel-Prozess aus VB.NET app
Habe ich die Klasse unten zu öffnen und zu sammeln, die Namen der Arbeitsblätter in einer excel-Datei. Es so tut wie es soll beim öffnen der Datei und gibt die Namen der einzelnen Arbeitsblatt. Leider bin ich nicht in der Lage, die Datei zu schließen. Dies hält die Excel.exe Prozess hängen. Auch nachdem ich versuchen, schließen Sie es an der Unterseite von dieser Klasse wird der Prozess noch hängt. Ich habe manuell goto Windows Task-Manager und beenden Sie den Prozess, bevor ich die Datei erneut verwenden. Auch wenn ich die Ausfahrt aus der Anwendung ist es immer noch da draußen. Irgendeine Idee, wie man tötet dieser Prozess von dem code?
Imports Excel = Microsoft.Office.Interop.Excel
Public Class ExcelWrapper
Dim strTypeSelection As String = String.Empty
Dim strFilePath As String = String.Empty
Function GetWorksheetsByName(ByVal strfilePath As String) As Array
Dim xlsApp As Excel.Application
Dim xlsWorkBook As Excel.Workbook
xlsApp = New Excel.Application
xlsWorkBook = xlsApp.Workbooks.Open(strfilePath)
Dim intWsCount As Integer = xlsApp.Worksheets.Count
Dim sarWorksheetName(intWsCount - 1) As String
Dim i As Integer = 0
'gathers the names off all the worksheets
For Each totalWorkSheets In xlsApp.Worksheets
sarWorksheetName(i) = totalWorkSheets.Name
i += 1
Next totalWorkSheets
xlsWorkBook.Close(strfilePath)
xlsApp.DisplayAlerts = False
xlsApp.Quit()
Return sarWorksheetName
End Function
End Class
InformationsquelleAutor rross | 2011-04-20
Du musst angemeldet sein, um einen Kommentar abzugeben.
Habe ich dieses Problem, bevor Sie als gut, und soweit ich mich erinnere war die Lösung zu nennen
Marshal.ReleaseComObject(Object obj)
oderMarshal.FinalReleaseComObject(Object obj)
auf alle Objekte, die kommen aus der Büro-Bibliotheken. Ich könnte sehr leicht falsch sein, obwohl. Viel Glück, Office automation ist ein riesiger Schmerz.InformationsquelleAutor MarkPflug
Für jeden Hinweis versuchen Sie;
(http://support.microsoft.com/kb/317109)
InformationsquelleAutor Alex K.
Vom http://www.experts-exchange.com/Programming/Misc/Q_24049269.html
InformationsquelleAutor Cheeso
Hier ist cleanup-code, den ich verwenden, wenn die Arbeit mit Excel durch Automatisierung. Es ist wichtig, Sie richtig Aufräumen oder der Prozess hängen, wie Sie sehen. Ich nehme an, Sie tun dies über eine desktop-Anwendung und keine web-app. Dies geschieht in der Regel in einem finally-block und der Probe ist c#, aber ich denke, Sie sollten in der Lage sein, um es an Ihre Bedürfnisse anpassen.
InformationsquelleAutor Gratzy
Dies ist nicht spezifisch für Ihre Excel-Problem, aber Sie können den Prozess beenden, indem Sie den Namen mit...
Wird töten alle Prozesse, die mit dem bestimmten Namen.
Möchten Sie vielleicht versuchen, hinzufügen
Excel = Nothing
um zu sehen, ob das klärt das Problem (und können Sie vermeiden, gewaltsam töten den Prozess".
InformationsquelleAutor Rob P.
Ich ändern würde, am Ende Teil des Codes wie folgt, zu korrigieren einige der Probleme, die verursachen können Ihr problem:
InformationsquelleAutor Doug Glancy