Seite 1 von 1

Wie man Winword-Textmarken anspringt und befüllt

Verfasst: Mittwoch 5. Juli 2006, 19:29
von gerold
Hi!

Es ist die Frage aufgetaucht, wie man mit Python eine Word-Datei öffnen, die darin enthaltenen Textmarken (Bookmarks) anspringt und dort einen frei definierbaren Text einfügen kann.

Das geht so:

Man erstellt sich eine Word-Datei (ein Dokument), die als Vorlage dient. In diesem Dokument setzt man die Textmarken an die Positionen, an denen man den Text hinschreiben möchte. Im Beispiel, weiter unten, habe ich das Dokument "dokument.doc" genannt. Und das Python-Modul muss für dieses Beispiel im selben Ordner wie das Dokument liegen.

Zur Anleitung habe ich mit WINK einen kleinen Film gemacht. Leider habe ich erst zu spät gemerkt, dass drei Bilder pro Sekunde doch zu wenig sind. Aber man kann, glaube ich, doch alles wichtige erkennen.

http://gerold.bcom.at/bilder/word_textm ... python.htm

Und hier ist der zugehörige Python-Quellcode:

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: iso-8859-1 -*-

import win32com
import win32com.client
import os
import os.path


filename = os.path.abspath("dokument.doc")

# Word-Application referenzieren
app = win32com.client.Dispatch("Word.Application") 

# Word sichtbar machen. Kann später weggelassen werden
app.Visible = True

# Quelldatei öffnen
doc = app.Documents.Open(filename)

# Die in der Quelldatei enthaltenen Textmarken (marke1, marke2 und marke3)
# anspringen und hinten dran einen Text schreiben
doc.Bookmarks("marke1").Range.InsertAfter("Hier ist Marke1")
doc.Bookmarks("marke2").Range.InsertAfter("Hier ist Marke2")
doc.Bookmarks("marke3").Range.InsertAfter("Hier ist Marke3")

# Neuen Dateinamen generieren und unter diesem Dateinamen das geänderte
# Dokument abspeichern
base, ext = os.path.splitext(filename)
new_filename = base + "_new" + ext
doc.SaveAs(new_filename)

# Das Dokument und Word schließen und die Referenzen vernichten. WICHTIG!
doc.Close()
del doc

app.Quit()
del app

# Fertig
print "Fertig"
mfg
Gerold
:-)

Super

Verfasst: Mittwoch 5. Juli 2006, 21:10
von Andy
Gerold, ich danke Dir. :D Du hast mir sehr geholfen.
Auch noch mal für die Links vielen Dank.

Ich mach mich dann schon mal an die GUI.

Viele Grüße andy

Verfasst: Donnerstag 6. Juli 2006, 21:11
von Andy
Hi Gerold,

ich schon wieder!

Möchte auch gern Kontrollkästchen-Formularfelder (Checkbox)
aktivieren. Hab´es geschafft diese zu selektieren.
Aber wie übergebe ich True?

Hier komme ich nicht weiter:

Code: Alles auswählen

doc = app.Documents.Open(filename)
# Selektieren der Checkbox funktioniert bereits:
doc.Bookmarks("Kontrollkästchen2").Select
# Aber wie kann ich d. Checkbox ankreuzen?
# doc.selection.Bookmarks = True???

doc.Bookmarks("marke2").Range.InsertAfter("Hier ist Marke2") 
doc.Bookmarks("marke3").Range.InsertAfter("Hier ist Marke3")
Danke andy

Verfasst: Freitag 7. Juli 2006, 07:54
von gerold
Andy hat geschrieben:Aber wie übergebe ich True?
Hi Andy!

Kurz gesagt: Keine Ahnung.

lg
Gerold
:-)

Kontrollkästchen-Formularfelder (Checkbox)

Verfasst: Montag 10. Juli 2006, 19:43
von Andy
Hi Leutz,

hab´s nun hinbekommen.
Da sich die ganzen VB-Codebeispiele irgendwie für mich nicht in Python umsetzen ließen, mach ich dass nun so:

Man kann einfach das Aktivieren der Checkbox in Word als Makro aufzeichnen, und dieses dann per Python ausführen.

Um an Gerolds Tutorial anzuknüpfen:

Code: Alles auswählen

doc.Bookmarks("marke1").Range.InsertAfter("Hier ist Marke1")
doc.Bookmarks("marke2").Range.InsertAfter("Hier ist Marke2") 
doc.Bookmarks("marke3").Range.InsertAfter("Hier ist Marke3")
app.Run('Makro1')
Vielleicht hat ja doch noch jemand eine etwas pythonische Lösung für die Checkboxen? 8) Obwohl ich denke, dass es so schon gut gelöst ist.

Gruss andy

Verfasst: Freitag 11. Mai 2007, 00:21
von gurke
sehr genial..! :D das hilft mir meilensteine weiter 8)