Visual Studio - VB - Excel Verbindung (um Daten auszulesen) lässt sich nicht mehr schließen

  • VB.NET

Es gibt 1 Antwort in diesem Thema. Der letzte Beitrag () ist von SKeks.

    Visual Studio - VB - Excel Verbindung (um Daten auszulesen) lässt sich nicht mehr schließen

    Hallo liebe Mitglieder,

    ich habe folgendes Problem. Ich muss Daten aus einer Excel-Datei auslesen und verarbeiten. Dazu nutze ich die "Microsoft.Office.Interop.Excel.Application". Aufbau und anschließende Verarbeitung klappt super, jedoch nach der Vearbeitung möchte ich, dass die Verbindung geschlossen wird. Dies funktioniert jedoch nicht. Habt Ihr vill. einen Rat? :)

    Um die Verbindung zur Datei aufzubauen gehe ich wie folgt vor:

    VB.NET-Quellcode

    1. 'Verbindung zur Excel-Datei aufbauen
    2. Public Function excel_connect() As Object
    3. Dim connection As New Microsoft.Office.Interop.Excel.Application
    4. Try
    5. connection.Workbooks.Open(pfad.Text) 'pfad.Text ist der komplette Pfad, wo die xls bzw. xlsx liegt
    6. Catch ex As Exception
    7. MsgBox(ex)
    8. End Try
    9. Return connection
    10. End Function


    Meine Funktion zum Beenden, die funktioniert jedoch nicht:

    VB.NET-Quellcode

    1. 'Verbindung zur Excel-Datei beenden
    2. Public Sub excel_cancel(connection As Object)
    3. connection.Workbooks("xyz.xlsx").Close()
    4. End Sub

    • "connection.Workbooks("xyz.xlsx").Close()" -> funktioniert nicht. Zwar wird komplett durchkompeliert und das Programm geht einwandfrei, jedoch bleibt EXCEL.EXE *32 im Task-Manager vorhanden. (Prozess wurde nicht beendet)
    • "connection.Workbooks(pfad.Text).Close()" -> Fehlermeldung: "Ein Ausnahmefehler des Typs "System.Runtime.InteropServices.COMException" ist in Microsoft.VisualBasic.dll aufgetreten. Zusätzliche Informationen: Ungültiger Index. (Ausnahme von HRESULT: 0x8002000B (DISP_E_BADINDEX))"
    • "connection.Workbooks.Close()" -> funktioniert nicht. Zwar wird komplett durchkompeliert und das Programm geht einwandfrei, jedoch bleibt EXCEL.EXE *32 im Task-Manager vorhanden. (Prozess wurde nicht beendet)
    • connection.Workbooks().Close()" -> funktioniert nicht. Zwar wird komplett durchkompeliert und das Programm geht einwandfrei, jedoch bleibt EXCEL.EXE *32 im Task-Manager vorhanden. (Prozess wurde nicht beendet)

    Habt Ihr da noch eine Idee, wie ich dies eventuell lösen könnte?

    Danke im Voraus für eure Hilfe :)
    Hi,
    ich habe das ganze so in meinem Projekt gelöst, mich hat das übrigbleiben des Prozess im taskmanager nämlich auch gestört.
    Im Prinzip wird die Prozessnummer deiner Excelapplikation abgefragt und dann der Prozess darüber beendet. Dies ist eine sehr rigorose Methode, aber sie funktioniert wunderbar :)

    VB.NET-Quellcode

    1. Imports Excel = Microsoft.Office.Interop.Excel
    2. Imports System.Diagnostics
    3. Imports System.IO
    4. Public MustInherit Class DataWorkExcel
    5. Protected _xlAppl As Excel.Application
    6. Protected _xlMappe As Excel.Workbook
    7. Protected _IsOpen As Boolean
    8. Protected Sub openExcelApplication(ByVal Path As String)
    9. _xlAppl = New Excel.Application()
    10. _xlAppl.Visible = False
    11. _xlMappe = _xlAppl.Workbooks.Open(Path)
    12. _IsOpen = True
    13. End Sub
    14. Public Sub closeExcelApplication()
    15. If _IsOpen Then
    16. Dim processId As IntPtr
    17. _xlMappe.Close()
    18. GetWindowThreadProcessId(_xlAppl.Hwnd, processId)
    19. Dim excelProcess As Process = Process.GetProcessById(processId.ToInt32())
    20. excelProcess.Kill()
    21. _IsOpen = False
    22. Else
    23. Exit Sub
    24. End If
    25. End Sub
    26. 'Zugang zur API ''user32''
    27. Protected Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hWnd As Integer, ByRef lpdwProcessId As IntPtr) As IntPtr
    28. End Class



    msdn.microsoft.com/de-de/libra…ocess.kill(v=vs.110).aspx

    Edit: Unnötiges Zeug aus der Klasse gelöscht

    Dieser Beitrag wurde bereits 11 mal editiert, zuletzt von „SKeks“ ()