WordEx UDF - FindReplace in Textfeldern und Kopf- und Fußzeile

  • Hallo,

    ich verwende das WordEx UDF von water.

    Die Funktion "_Word_DocFindReplace" sucht und ersetzt ausschließlich im Text einer .doc / .docx Datei.

    Meine Frage dazu:

    Mit welcher Einstellung ist es möglich, dass _Word_DocFindReplace auch in eingefügten Textfeldern, sowie in den Kopf- und Fußzeilen auswirkungen hat?

    Muster aus dem Beispielscript.

    [autoit]

    Func Example1($oDoc)
    _Word_DocFindReplace($oDoc, "test document", "test document with replaced text")
    If @error <> 0 Then Return MsgBox(16, "Word UDF: _Word_DocFindReplace Example 1", "Error replacing text in the document." & @CRLF & "@error = " & @error & ", @extended = " & @extended)
    MsgBox(64, "Word UDF: _Word_DocFindReplace Example 1", "Text successfully replaced.")
    EndFunc ;==>Example1

    [/autoit]

    Versuche mit _Word_DocRangeSet weiterzukommen blieben erfolglos (vermutlich wg. mir selbst).

    Weiss jemand die Lösung?

    Danke und Gruß

    Einmal editiert, zuletzt von qwert23 (15. Dezember 2012 um 08:02)

    • Offizieller Beitrag

    Ich hatte mal eine Funktion erstellt zum Ändern der Fußzeile. Da siehst du, wie man den Inhalt der Fußzeile auslesen kann - dann einfach Suchen&Ersetzen und ändern.

    Edit: Auf die Kopfzeilen greifst du absolut identisch zu - nur statt ".Footers" verwendest du ".Headers"

    Spoiler anzeigen
    [autoit]

    ;===============================================================================
    ; Function Name....: _WordDoc_FooterChange
    ; Description......: Ändert in einem Worddokument die Fußzeile
    ; Parameter(s).....: $sPath Pfad zum Word Dokument
    ; $sFooterNew Die neue Fußzeile
    ; optional $fVisible Wordfenster sichtbar, Standard=0 (Nein)
    ; optional $fSave Speichern der Änderung? Standard=1 (Ja)
    ; optional $fQuit Word beenden? Standard=0 (Nein), mit "1" wird auch $fSave=1 gesetzt
    ; Return Value(s)..: Erfolg Den alten Inhalt der Fußzeile
    ; Fehler @error = 1 - Dateipfad existiert nicht
    ; Note.............: Falls Word bereits geöffnet ist, wird in dieser Instanz gearbeitet, anderenfalls wird eine neue Instanz erstellt.
    ; Author(s)........: BugFix ( [email='bugfix@autoit.de'][/email] )
    ;===============================================================================
    Func _WordDoc_FooterChange($sPath, $sFooterNew, $fVisible=0, $fSave=1, $fQuit=0)
    If not FileExists($sPath) Then Return SetError(1,0,0)
    If $fQuit = 1 Then $fSave = 1
    Local Const $wdHeaderFooterPrimary = 1
    Local $sFooterOld, $oWord, $fCreated = 0
    $oWord = ObjGet($sPath, "Word.Application")
    If @error Then
    $oWord = ObjCreate("Word.Application")
    $fCreated = 1
    EndIf
    $oWord.Visible = $fVisible
    If $fCreated Then $oWord.Documents.Open($sPath)
    $sFooterOld = $oWord.ActiveDocument.Sections(1).Footers($wdHeaderFooterPrimary).Range.Text
    $oWord.ActiveDocument.Sections(1).Footers($wdHeaderFooterPrimary).Range.Text = $sFooterNew
    $oWord.Application.DisplayAlerts = False
    If $fSave Then $oWord.ActiveDocument.Save
    If $fQuit Then $oWord.Quit
    Return $sFooterOld
    EndFunc ;==>_WordDoc_FooterChange

    [/autoit]
  • Wenn die Zeile
    $oWord = ObjGet($sPath, "Word.Application") in $oWord = ObjGet("", "Word.Application") geändert wird, dann scheint es zu funktionieren.

    Hast Du noch eine Idee, wie Textfelder (in Word = Einfügen Textfeld) ansprechbar sind? Auch geht es um Suchen/Ersetzen von Texten.

    Danke und Gruß

  • mit dem Word UDF werde ich nun die Problematik so lösen, dass das .docx File im Hintergrund als .xml gespeichert wird. Mit _ReplaceStringInFile erfolgt dann der Suchen/Ersetzen-Prozess.

    Textfelder, Überschriften etc. werden damit ersetzt.

    Anschließend starten der xml und ggf. als .docx direkt wieder abspeichern.

    Danke für die Unterstützung!

  • Ich werde mal schauen, wie ich dem neuen Word UDF auch suchen/ersetzen in den Kopf- und Fußzeilen beibringen kann.