kostenloser Webspace werbefrei: lima-city


C# excel und word richtig schließen

lima-cityForumProgrammiersprachenProgrammieren mit .NET & Mono

  1. Autor dieses Themas

    tft-development

    Kostenloser Webspace von tft-development

    tft-development hat kostenlosen Webspace.

    Hallo,
    ich habe in c# forms ein Programm geschrieben, das daten aus Excel ließt und mehrere Word dokumente erstellt, bearbeitet und speichert...

    beim Schließen der Exceltabelle (am ende des Programms) kommt eine Fehlermeldung und das Programm stürzt ab...

    alles hat wunderbar geklappt, alle word dateien gespeichert usw,
    da ich alles "hidden" aufrufe sieht man auch keine offenen word oder excel dateien

    aber:
    im taskmanager werden die Prozesse noch angezeigt und
    beim Versuch den Rechner herunter zu fahren muss er erst auf die prozesse warten(recht lang)

    hier der wichtige Code zu Excel:
    //####### Startet Excel und öffnet die Exceldatei #######
    private Excel.Application xlApp = new Excel.Application();
    private Excel.Workbook xlWorkBook = xlApp.Workbooks.Open(ExcelPath, 0, true);
    private Excel.Worksheet xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);
    private Excel.Range range = xlWorkSheet.UsedRange;
    
    //####### schließt die tabelle und anschließend Excel #######
    xlWorkBook.Close(true, null, null);
    xlApp.Quit();


    hier der Word code:
    //####### starten der Word und des Formulares sowie hide #######
    private Word.Application WordApp = new Word.Application();
    private Word.Document ExistingDocument = WordApp.Documents.Open(WordPath, null, true);
    ExistingDocument.ActiveWindow.Visible = false;
    WordApp.Visible = false;
    
    //####### schließt das aktuelle dokument und Word #######
    ExistingDocument.Close(Word.WdSaveOptions.wdDoNotSaveChanges);
    WordApp.Quit();


    wie kann ich die prozesse beenden?
    mache ich etwas falsch beim schließen oder verwende ich eine falsche funktion?
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Hallo

    versuchs mal mit Marshal.ReleaseComObject
    --> http://msdn.microsoft.com/de-de/library/system.runtime.interopservices.marshal.releasecomobject%28v=vs.110%29.aspx

    Hatte das Problem auch schon mal.

    Gruß
    Trancer
  4. Autor dieses Themas

    tft-development

    Kostenloser Webspace von tft-development

    tft-development hat kostenlosen Webspace.

    Danke für die Antwort, habs auch gleich ausprobiert...:

    Ich habe die .dll eingebunden, den namespace hinzugefügt:
    using System.Runtime.InteropServices;


    und die funktion eingesetzt:

    public void CloseWord()
                {
                    // Schließt und beendet Word
    
                    ExistingDocument.Close(Word.WdSaveOptions.wdDoNotSaveChanges);
                    WordApp.Quit();
                    Marshal.ReleaseComObject(WordApp);
                }


    Und dennoch laufen die Prozesse nach abschluss des Programms...

    habe ich etwas falsch gemacht?

    grüße

    Beitrag zuletzt geändert: 6.2.2014 10:22:09 von tft-development
  5. Mit GC.Collect(); sollte es eigentlich kein Problem mehr darstellen...versuchs einfach mal.
  6. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!