Ich schreibe eine Anwendung in C #, die eine Excel-Vorlagendatei für Lese- / Schreibvorgänge öffnet. Ich möchte, wenn der Benutzer die Anwendung schließt, der Excel-Bewerbungsprozess geschlossen wurde, ohne die Excel-Datei zu speichern. Siehe meinen Task-Manager nach mehreren Ausführungen der App.
Ich benutze diesen Code, um die Excel-Datei zu öffnen:
public Excel.Application excelApp = new Excel.Application();
public Excel.Workbook excelBook;
excelBook = excelApp.Workbooks.Add(@"C:/pape.xltx");
und für den Datenzugriff verwende ich diesen Code:
Excel.Worksheet excelSheet = (Worksheet)(excelBook.Worksheets[1]);
excelSheet.DisplayRightToLeft = true;
Range rng;
rng = excelSheet.get_Range("C2");
rng.Value2 = txtName.Text;
Ich sehe ähnliche Fragen in Stackoverflow wie diese Frage und diese und Test Antworten, aber es funktioniert nicht funktioniert.
c#
excel
visual-studio-2012
excel-interop
kill-process
Javad Yousefi
quelle
quelle
Antworten:
Versuche dies:
Beim Schließen der Arbeitsmappe stehen Ihnen drei optionale Parameter zur Verfügung:
Workbook.Close(false)
oder wenn Sie eine späte Bindung durchführen, ist es manchmal einfacher, Null zu verwenden.Workbook.Close(0)
So habe ich es gemacht, wenn ich das Schließen von Arbeitsmappen automatisiert habe.Außerdem habe ich die Dokumentation dazu nachgeschlagen und sie hier gefunden: Excel Workbook Close
Vielen Dank,
quelle
Versuchen Sie dies .. es hat bei mir funktioniert ... Sie sollten dieses xl-Anwendungsobjekt freigeben, um den Prozess zu stoppen.
quelle
Ref: https://stackoverflow.com/a/17367570/132599
Dies löste das Problem für mich. Ihr Code wird:
Und dann lassen Sie alle diese Objekte los:
Ich wickle dies in ein,
try {} finally {}
um sicherzustellen, dass alles freigegeben wird, auch wenn etwas schief geht (was könnte möglicherweise schief gehen?), Z.quelle
Denken Sie daran, es beendet den Prozess:
Haben Sie auch versucht, es normal zu schließen?
quelle
Excel zu töten ist nicht immer einfach. Siehe diesen Artikel: 50 Möglichkeiten, Excel zu töten
Dieser Artikel enthält die besten Ratschläge von Microsoft ( MS Knowlege Base Article ), wie Excel ordnungsgemäß beendet werden kann, stellt dies jedoch auch sicher, indem der Prozess bei Bedarf abgebrochen wird . Ich habe gerne einen zweiten Fallschirm.
Stellen Sie sicher, dass Sie alle geöffneten Arbeitsmappen schließen, die Anwendung beenden und das xlApp-Objekt freigeben. Überprüfen Sie abschließend, ob der Prozess noch aktiv ist, und beenden Sie ihn, wenn dies der Fall ist.
Dieser Artikel stellt außerdem sicher, dass nicht alle Excel-Prozesse beendet werden, sondern nur der genaue Prozess, der gestartet wurde.
Siehe auch Prozess vom Fenstergriff abrufen
Hier ist der Code, den ich benutze: (funktioniert jedes Mal)
quelle
Ich bin auf die gleichen Probleme gestoßen und habe viele Methoden ausprobiert, um sie zu lösen, aber es funktioniert nicht. Endlich habe ich das übrigens gefunden. Einige Referenzen geben hier die Linkbeschreibung ein
Hoffe, mein Code kann jemandem in der Zukunft helfen. Ich habe mehr als zwei Tage damit verbracht, es zu lösen. Unten ist mein Code:
quelle
excelBook.Close (); excelApp.Quit (); Fügen Sie das Ende des Codes hinzu, es könnte ausreichen. Es funktioniert an meinem Code
quelle
Sie können den Prozess mit Ihrem eigenen
COM
Objekt Excel Pid beendenFügen Sie irgendwo unterhalb des DLL-Importcodes hinzu
und verwenden
quelle
Ich habe festgestellt, dass es wichtig ist,
Marshal.ReleaseComObject
innerhalb einerWhile
Schleife UND mit Garbage Collection zu beenden .quelle
Es schließt den letzten 10-Sekunden-Prozess mit dem Namen "Excel".
quelle
Der richtige Weg, um alle Excel-Prozesse zu schließen
quelle
Basierend auf anderen Lösungen. Ich habe dies verwendet:
Verwenden Sie den "MainWindowHandle", um den Prozess zu identifizieren und ihn zu schließen.
excelObj: Dies ist mein Application Interop Excel-Objekt
quelle
Verwenden Sie für jedes Excel-Objekt eine Variable und müssen eine Schleife ausführen
Marshal.ReleaseComObject >0
. Ohne die Schleife bleibt der Excel-Prozess weiterhin aktiv.quelle
Wir können die Excel-Anwendung schließen, während wir xls in xlsx konvertieren, indem wir den folgenden Code verwenden. Wenn wir diese Art von Aufgabe ausführen, wird die Excel-Anwendung im Task-Manager ausgeführt. Wir sollten dieses Excel schließen, das im Hintergrund ausgeführt wird. Interop ist eine Com-Komponente, um die von uns verwendete com-Komponente Marshal.FinalReleaseComObject freizugeben.
quelle
Die meisten Methoden funktionieren, aber der Excel-Prozess bleibt immer bis zum Abschluss der Anwendung bestehen.
Wenn der Excel-Prozess einmal beendet wird, kann er nicht mehr im selben Thread ausgeführt werden - ich weiß nicht warum.
quelle
Diese GetWindowThreadProcessId findet die richtige Prozess-ID, um sie zu übertreffen.
quelle
quelle