C# excel und word richtig schließen
lima-city → Forum → Programmiersprachen → Programmieren mit .NET & Mono
aktuelle dokument
antwort
aufruf
code
darstellen
datei
datum
dokument
falsche funktion
funktion
laufen
null
problem
programm
rang
system
tabelle
versuch
warten
wichtige code
-
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? -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
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 -
Mit GC.Collect(); sollte es eigentlich kein Problem mehr darstellen...versuchs einfach mal.
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage