(CC) - Word über Automation verwenden

6. September 2011 09:33

Hallo zusammen,

natürlich ist mir bewusst, dass man Word über Automations benutzen kann:
Dateien öffnen, Dateien schreiben, Dateien speichern, Dateien in ein Blob lesen und und und ....
Ich hab jedoch eine speziellere Frage:
Ist es möglich das "Suchen & Ersetzen" in einer Word Datei von Navision vornehmen zu lassen?

Es besteht eine Datei (Vorlage), die einen Text enthält. Dieser Text enthält Platzhalter "@@Wert1" "@@Wert2" usw.
Von Navision sollen diese Platzhalter nun fest abgefragt werden und dann mit den wirklichen Werten ersetzt werden.

Eine Serienbriefdatei ist leider nicht möglich. Die Vorlage ändert sich sehr oft und wird auch von anderen Systemenen genutzt. Diese enthalten keine Serienbrieffelder, sondern die besagten Platzhalter.
Ich hab in der WordDoc Automation auch schon die Funktion "Select" gefunden, die sicher damit zu tun hat.

Hier noch einmal ein Makro, wie das Suchen & Ersetzen und Word abläuft:
Code:
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = "@@wert"
        .Replacement.Text = "123"
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll


Hoffe es gibt diese Möglichkeit von Navision aus auch.

Danke und Grüße
Andree

Re: (CC) - Word über Automation verwenden

28. November 2011 00:49

Hallo,

ich habe zwar leider keine Lösung deines Problems. Vielmehr die Frage, ob Du es schon irgendwie lösen konntest.
Ich stehe nämlich momentan vor genau dem gleichen Problem.
Scheitern tue ich gerade am "execute" der den replace-Befehl absendet.
In VB sieht der ja so aus:
Code:
Selection.Find.Execute Replace:=wdReplaceAll


Aber ich scheitere gerade daran, das in NAV umzusetzen;
Ich habe eine Variable wdFind --> Automation Server für MS Word, Subtype Find
Ein schnödes wdfind.execute(); bringt nichts, da ihm wohl der Befehl fehlt, was er genau machen soll (wahrscheinlich wird das durch Replace := wdReplaceAll im VB-Code beschrieben.
Mit Parametern klappts aber auch nicht so ganz.

Vielleicht hast du ja eine Lösung.... Ich bedanke mich schon mal im Voraus!

Re: (CC) - Word über Automation verwenden

28. November 2011 09:53

Leider konnte ich dieses Problem so auch noch nicht lösen.

Wir haben das ganze dann einfach so gelöst, indem wir auf RTF-Dateien umgestiegen sind. Diese kann man direkt quasi als TXT in NAV durchgehen. Da haben wir nach unseren bestimmten Platzhaltern (gekennzeichnet mit @@) gesucht und diese quasi im Quelltext der Datei geändert. Das funktioniert auch soweit recht gut in den meisten Situationen. Ist natürlich leicht Fehleranfällig, wenn Platzhalter genau in einen Zeilenumbruch kommen. Diese Wahrscheinlichkeit ist aber sehr gering.

Wie das über die Word Automation direkt läuft, ist mir leider weiterhin nicht bekannt leider.

Grüße
Andree

Re: (CC) - Word über Automation verwenden

28. November 2011 16:29

Das kann man vielleicht so ähnlich wie hier lösen: viewtopic.php?t=2691

Nur halt Wörter ersetzen statt zählen.

Re: (CC) - Word über Automation verwenden

13. Februar 2012 11:12

Suchen & Ersetzen ist mit Vorsicht zu genießen, wenn es über Automation verwendet werden soll. Das ganze "Execute"-Thema bezieht sich immer aufs GUI, welches ja bei der Automatisierung nicht (zwingend) vorhanden ist. Außerdem sind Parameter wie "wdReplaceAll" im Code ebenfalls zu hinterlegen ...

Wahrscheinlich ist die oben genannte Methode, nämlich den Text zu parsen und die Ersetzungen selbst zu codieren, die einfachere.