6 Stimmen

Wie kann ich alle Vorkommen einer Zeichenkette in einem Word-Dokument mit Python suchen und ersetzen?

Ich bin im Moment ziemlich ratlos. Ausgehend von Kann ich Win32 COM verwenden, um Text in einem Word-Dokument zu ersetzen? Ich war in der Lage, ein einfaches Vorlagensystem zu programmieren, das Word-Dokumente aus einer Word-Dokument-Vorlage generiert (in Python).

Mein Problem ist, dass der Text in "Textfeldern" nicht auf diese Weise gefunden wird. Auch in Word selbst gibt es keine Möglichkeit, alles zu durchsuchen - man muss tatsächlich zwischen "Hauptdokument" und "Textfelder" wählen. Da ich neu in der Windows-Welt bin, habe ich versucht, die VBA-Dokumente zu durchsuchen, aber keine Hilfe gefunden (wahrscheinlich, weil "Textfeld" ein sehr gebräuchlicher Begriff ist).

word.Documents.Open(f)
wdFindContinue = 1
wdReplaceAll = 2
find_str = '\{\{(*)\}\}'
find = word.Selection.Find

find.Execute(find_str, False, False, True, False, False, \
True, wdFindContinue, False, False, False)

while find.Found:
    t = word.Selection.Text.__str__()
    r = process_placeholder(t, answer_data, question_data)

    if type(r) == dict:
        errors.append(r)
    else:
        find.Execute(t, False, True, False, False, False, \
        True, False, False, r, wdReplaceAll)

Dies ist der relevante Teil meines Codes. Ich konnte inzwischen alle Probleme selbst umgehen (Hinweis: wenn Sie Zeichenketten mit mehr als 256 Zeichen ersetzen wollen, müssen Sie dies über die Zwischenablage tun, etc ...)

2voto

Reto Aebersold Punkte 15748

Vielleicht können Sie das OpenOffice API unter Verwendung der UNO Komponenten-Technologie. Mit der Python-UNO-Brücke können Sie eine Verbindung zu einer OpenOffice-Instanz herstellen, die im Headless-Modus läuft. Sehen Sie sich die Lehrgang um loszulegen.
Das ist vielleicht ein Overkill für Ihr Szenario, aber es ist eine sehr leistungsfähige und flexible Lösung.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X