Mit C# Word-Dokument bearbeiten ohne dass Word sich öffnet?
Hallo, ich versuche gerade ein docx-Dokument zu bearbeiten, das hier ist mein Code:
using Microsoft.Office.Interop.Word;
[...]
Application wordApp = new Application();
wordApp.Visible = false;
Document wordDoc = wordApp.Documents.Open([pfad], ReadOnly: false, Visible: false);
wordDoc.Activate()
Range rng = wordDoc.Range(0, 2);
rng.Text = "Some Text";
wordApp.Documents.Save(NoPrompt: true, OriginalFormat: true);
wordApp.Documents.Close(SaveChanges: true, OriginalFormat: false, RouteDocument: false);
Console.WriteLine("Finished");
Console.ReadLine();
Aber obwohl ich die Visible-Vairable auf false gesetzt habe, öffnet sich Word. Nicht normal, sondern so:
Kann mir da jemand helfen?
Ist behoben!
wordApp.Quit();
am Ende verhindert jetzt dass das Fenster aufgeht...
2 Antworten
probiere mit Auskommentieren herauszufinden, welche Zeile genau Word öffnet. Und finde auch heraus, was GENAU visible tut.
Was willst Du denn bewirken?
Ich könnte mir vorstellen, dass es nicht geht oder VBA nicht optimal ist für die Idee.
Was man auf dem Screenshot sieht, könnte genau sein, was Du befiehlst: Dass nämlich die Anwendung sich öffnet, um den Makro verarbeiten zu können und das Dokument selbst nicht.
Details allerdings müsstest Du ausprobieren. und sie können auch je nach Word-Version verschieden sein.
Also ein Word Dokument hat viele interne Formatierungen. Um nur den Text zu bearbeiten müssen alle Formatierungen, die nichts mit dem Text zu tun haben, rausgefiltert werden. das ist deshalb nicht einfach, weil man diese nicht sehen kann.
Versuch mal mit Edit ein Word-Dokument zu öffnen, dann weißt du was ich meine.
Besser ist es, wenn du den Text im Word als xxx.txt abspeicherst, dann mit C# bearbeitest und wieder als xxx.txt zurückspeicherst. Diesen kannst du mit Word laden und dann wieder als xxx.docx zurückschreiben.
Ahh, ich habe mit einem Haltepunkt herausgefunden dass die sichtbare Anwendung immer erst am Ende geöffnet wurde, meine Vermutung ist dass die Anwendung sichtbar wurde, als das Programm beendet wurde, weil sie nicht mehr "unterdrückt" wurde, wenn du verstehst was ich meine. Kann aber auch sein dass der Grund ein komplett anderer war, auf jeden Fall ist das ganze jetzt durch ein dezentes wordApp.Quit(); am Ende behoben...