wie schließt man eine laufende Instanz von Word-Dokument? (C#)
Ich konnte sehen, eine Menge von sehr ähnlichen Themen, alle um Sie herum, aber nichts scheint mir eine Lösung, die sollte sehr basic.
Aus meiner winforms-Anwendung habe ich schließen müssen, dass eine ausgeführte Instanz von word-Dokument (geöffnet von der Anwendung selbst). Wenn ich öffnen Sie das word-Dokument aus der Anwendung habe ich immer eine Spur, die Sie in einer Liste. Nun, wie kann ich in der Nähe der gleichen doc?
Hier ist, was ich versucht habe:
private bool CloseWord(string osPath) //here I pass the fully qualified path of the file
{
try
{
Word.Application app = (Word.Application)Marshal.GetActiveObject("Word.Application");
if (app == null)
return true;
foreach (Word.Document d in app.Documents)
{
if (d.FullName.ToLower() == osPath.ToLower())
{
d.What? //How to close here?
return true;
}
}
return true;
}
catch
{
return true;
}
}
Bekomme ich eine Menge von Methoden für das document-Objekt, sondern nur eine .Close()
zu schließen, die Argumente wie diese: ref object SaveChanges, ref object OriginalFormat, ref object RouteDocument
die ich auch nicht verstehen.
Was ist der ideale Weg? Danke..
Edit:
-
Kann ich nicht schließen Sie die gesamte Word-Anwendung (WinWord) als Benutzer haben möglicherweise andere word-Dateien geöffnet.
-
Muss ich nur beenden Sie die Instanz von word (so etwas wie
Process.Kill()
) ohne Eingabeaufforderung für den Benutzer zu speichern oder nicht, usw.
InformationsquelleAutor nawfal | 2011-09-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
Diese Lösung kam von hier löst.
ich habe das gleiche problem,wenn ich das Programm starte und ein anderes Dokument mit dem gleichen Namen geöffnet ist,(in der Tat ist es geschlossen worden, ohne Entsorgung(in manchen Situationen)),dieser code Dosis nicht arbeiten,ich meine, ich bekomme die Fehlermeldung, dass eine andere Instanz ausgeführt wird.und als Sie sagte,ich kann nicht geschlossen werden, die gesamte WinWord.exe,bewirken, dass Benutzer möglicherweise andere word-Dateien geöffnet.es macht mich verrückt,ich hoffe, Sie können mir einige helfen.
der Fehler, dass ich sagte, ist:Word kann diese Datei nicht speichern, weil es bereits an anderer Stelle öffnen.
machen Sie es eine andere Frage, und mehr Licht gibt. seine schwer zu geben, eine Lösung von hier aus. Alles was ich sagen kann ist, sollten Sie einige smart-codes zu entsorgen die vorhandenen Instanzen von word. Bitte suchen Sie "Entsorgung aus word-Instanz" oder so. Viele threads gibt es auf SO
nawfal :danke,aber ich habe eine andere Frage bereits, und suchte im internet für einen ganzen Tag,konnte aber nichts finden, keine Lösung,trotzdem vielen Dank.
InformationsquelleAutor nawfal
Wie wäre es mit etwas wie:
Geändert Von: http://www.dreamincode.net/code/snippet1541.htm
Chuck, durchsucht diese Methode für Prozesse durch Ihre Namen. Zum Beispiel, meine word-Datei können Sie den Namen (das argument, das ich-pass) "C:\doc.doc" während des Prozesses, der name ist WINWORD, die nicht entsprechen. Daher .Kill() wird nie erreicht.
InformationsquelleAutor Chuck Savage
Ich weiß, es ist zu spät, aber ich fand dieses Thema, weil ich hatte das gleiche problem.
Und meine Lösung kann anderen Menschen helfen.
Die Lösung oben nicht gut funktioniert, weil es tötete jede ausgeführte Instanz von Word, wenn es nicht eröffnet, die vom c# - Programm, sondern der Benutzer.
Also das war nicht so anwenderfreundlich.
Mein code prüft die Abläufe vor/nach der Erstellung der
Word.Application
- Objekt in c# und schreibt die IDs derWINWORD
Prozesse inList<int>
dann vergleicht es die Werte in beiden
List<int>
.Wenn ein
processID
ist nicht in beidenList<int>
es killt den Prozess mit dieser ID.Führen Sie diese Schritte zweimal (einmal vor der Schöpfung des Wortes.Anwendung und einmal nach).
Führen
killProcesses(processesbeforegen, processesaftergen);
Nicht, wenn Sie rufen Sie die zweite Methode direkt nach der Erstellung des Word-Application-Objekts und starten des Prozesses. Nun ja, es gibt eine zeitliche Lücke von vielleicht einer Sekunde, aber in dieser Zeit fast kein Benutzer öffnen Sie eine weitere Instanz von Word.
Ich denke immer noch, das ist eine unzuverlässige Lösung. Es funktioniert gut für kleine Projekte, die Sie zu Hause tun, aber sollte nicht verwendet werden, die in jeder Art von industriellen Umfeld, und der zweite Satz klar warum.
InformationsquelleAutor jAC
Wenn Sie möchten, schließen ganze word-Anwendung, können Sie einfach anrufen:
InformationsquelleAutor Jiří Herník