Excel Process bleibt bestehen

  • VB.NET

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von petaod.

    Excel Process bleibt bestehen

    Moin Forum,

    ich habe die Beiträge schon gelesen, wie man Excel richtig beendet (bei mir Excel 2010). Bei mir scheint es aber nicht richtig zu funktionieren.

    Ich erkläre mal kurz mein Programm:
    3 verschiedene Classen schreiben Daten in 2 verschiedene Exceltabellen. Die Prozesse werden jeweils als Thread hintereinander (!) ausgeführt.
    Das Füllen funktioniert soweit auch :D . Na immerhin...
    Nach dem Ausführen dieses Sourcecodes (in jeder der 3 Classen enthalten):

    VB.NET-Quellcode

    1. ThisWorkbook.Save()
    2. 'ThisWorkbook.Close()
    3. ExcelApp.Workbooks.Close()
    4. ExcelApp.Quit()
    5. ExcelApp = Nothing

    und nachdem alle drei Threads beendet sind, stehen aber 3 Excel Processe im Task-Manager.
    Diese bleiben auch bestehen, wenn ich das Debugggen beende.

    Hat jemand Rat?
    Vielen Dank im Voraus
    Tukuan
    Drei Klassen benutzen zwei Excel-Tabellen? Aber du hast am Ende drei Excel-Prozesse, die im Taskmanager angezeigt werden? Das ergibt doch keinen Sinn. Einer reicht. Und den solltest du dann in den Klassen, die ihn nutzen, weder erzeugen oder starten noch schließen und beenden. Das sollte zentral passieren, dann hast du auch mehr Kontrolle darüber, wann die Excel-Instanz wo geschaffen wird und wann sie wieder beendet werden kann/muss.

    Mehr gibt dein Codeausschnitt leider nicht her, da er keinerlei Aussagen darüber macht, wo und wie genau du eigentlich deine Excel-Instanz(en) erzeugst und die Referenz darauf speicherst.
    Weltherrschaft erlangen: 1%
    Ist dein Problem erledigt? -> Dann markiere das Thema bitte entsprechend.
    Waren Beiträge dieser Diskussion dabei hilfreich? -> Dann klick dort jeweils auf den Hilfreich-Button.
    Danke.

    Office-Interop kann super-mühselig - Oh mist...

    Nun ja...

    Arby schrieb:

    Drei Klassen benutzen zwei Excel-Tabellen? Aber du hast am Ende drei Excel-Prozesse, die im Taskmanager angezeigt werden? Das ergibt doch keinen Sinn.
    Vielleicht hast du recht... Aber so wie das Programm gestrickt ist, finde ich es so doch schon sehr sinnig...
    Aber egal: Es löst nicht das Problem. Ich habe mal hier ein Beispielcode eingefügt, was das Programm ca. macht.

    VB.NET-Quellcode

    1. Private Sub TestExcel_Click(sender As System.Object, e As System.EventArgs) Handles TestExcel.Click
    2. Dim ExcelApp As New Excel.Application
    3. Dim ThisWorkbook As Excel.Workbook
    4. Dim MySheet As Excel.Worksheet
    5. ExcelApp.Workbooks.Open("D:\Mappe1.xltx", , True)
    6. ThisWorkbook = ExcelApp.ActiveWorkbook
    7. MySheet = CType(ExcelApp.Worksheets("Tab1"), Excel.Worksheet)
    8. MySheet.Cells(1, 1) = "Hallo"
    9. ThisWorkbook.SaveAs("D:\Hallo.xlsx")
    10. ThisWorkbook.Close()
    11. ThisWorkbook = Nothing
    12. ExcelApp.Quit()
    13. ExcelApp = Nothing
    14. End Sub


    Nach dem Ausführen hat man noch ein Excel Process im Task Manager.

    Oha... Ist das wirklich so? .

    ErfinderDesRades schrieb:

    Office-Interop kann super-mühselig werden, wenn man Wert drauf legt, dass nach Benutzung korrekt aufgeräumt wird
    Das ist dann ja echt mühsam...
    Das hilft mir schon sehr viel weiter...

    Danke euch beide schon mal.
    Viele Grüße
    Tukuan
    ExcelApp.Workbooks.Open("D:\Mappe1.xltx", , True)
    ThisWorkbook = ExcelApp.ActiveWorkbook
    würde ich durch

    VB.NET-Quellcode

    1. ThisWorkbook = ExcelApp.Workbooks.Open("D:\Mappe1.xltx", , True)
    ersetzen
    und vor dem Workbook.Close vielleicht noch ein MySheet=Nothing
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --