Excel richtig beenden

Hallo Community,
habe ein Problem wo ich nicht mehr weis wo mein Problem ist... ?(

Naja, kurze Beschreibung.

Greife auf Excel zu und importier Daten.

Code:
Excel.ApplicationClass excelApp = new Excel.ApplicationClass();
                                    Excel.Workbook workBook = excelApp.Workbooks.Open(fileName, 0, true, 5, "", "", true, Excel.XlPlatform.xlWindows, "\t", true, false, 0, true);
                                    Excel.Sheets WS = workBook.Worksheets;
                                    Excel.Worksheet workSheet = (Excel.Worksheet)WS.get_Item("Vorlage");

Greife hier auf eine fertig formatierte Vorlage zu...

Wenn alles geschehen will ich das ganze eigentlich beenden, so dass im Taskmanager auch alles zu ist.
Sachverhalt ist nur der das ich die ganze Applikation schliessen muss, und selbst dann ist Excel nicht immer zu 100% beendet. Auswirkung ist wie folgt das ich eine xls Datei nicht mehr öffnen kann um mir das importierte eventuell anzusehen...

Code:
                                    workSheet = null;
                                    WS = null;

                                    // Falls noch offen, Excel Datei schliessen und
                                    // Workbook Objekt freigeben

                                    if (workBook != null)
                                        workBook.Close(false, fileName, null);
                                    //workBook.Close(false, null, null);
                                    workBook = null;

                                    fileName = null;

                                    // Falls noch offen, Anwendung schliessen und
                                    // Application Objekt freigeben
                                    if (excelApp != null)
                                        excelApp.Quit();
                                    excelApp = null;

So sieht es aus... Need some help...

Thanks im Vorraus...
:)
 
hi,

Du solltest erst einmal Wissen, dass COM-Objekte nicht vom Garbage Collector verwaltet werden. Du musst diverse Objekte selbst freigeben.
Um dies zu bewerkstelligen benötigst du den Namespace "System.Runtime.InteropServices"

Code:
            // COM-Objektverweise freigeben
            Marshal.ReleaseComObject(workSheet);
            Marshal.ReleaseComObject(WS);
            Marshal.ReleaseComObject(workBook);

            // Excelapplcation schließen
            excelApp.Quit();

            // COM-Objektverweise freigeben
            Marshal.ReleaseComObject(excelApp);

            fileName = null;

            // Garbage Collector ausführen
            GC.Collect();

mfg Binäru$
 
Dann bitte auch mit
erledigt.png
markieren. Danke ;)
 
Zurück
Oben