109 lines
5.2 KiB
Python
109 lines
5.2 KiB
Python
import os
|
|
import win32com.client as win32
|
|
|
|
# Benutzerdefinierte Eingaben
|
|
input_folder = input("Geben Sie den Pfad zum Eingabeordner ein: ").strip()
|
|
output_folder = input("Geben Sie den Pfad zum Ausgabeordner ein: ").strip()
|
|
replace_area = input("Wählen Sie den Bereich zum Ersetzen (Header, Footer, Text): ").strip().lower()
|
|
find_text = input("Geben Sie den Text ein, den Sie ersetzen möchten: ").strip()
|
|
replace_text = input("Geben Sie den neuen Text ein, der ersetzt werden soll: ").strip()
|
|
|
|
# Sicherstellen, dass der Ausgabeordner existiert
|
|
os.makedirs(output_folder, exist_ok=True)
|
|
|
|
# Word-Anwendung starten
|
|
word = win32.gencache.EnsureDispatch('Word.Application')
|
|
word.Visible = False # Word-Fenster im Hintergrund ausführen
|
|
|
|
# Durch alle .dotx-Dateien im Eingabeordner gehen
|
|
for filename in os.listdir(input_folder):
|
|
if filename.endswith('.dotx'): # Überprüfen, ob es sich um eine Word-Vorlage handelt
|
|
file_path = os.path.join(input_folder, filename)
|
|
print(f"Bearbeite Datei: {filename}")
|
|
|
|
try:
|
|
# Datei öffnen
|
|
doc = word.Documents.Open(file_path)
|
|
|
|
# Header, Footer oder Textbereich bearbeiten basierend auf Benutzerauswahl
|
|
if replace_area == 'footer':
|
|
sections = doc.Sections
|
|
parts = []
|
|
for section in sections:
|
|
parts.extend([
|
|
section.Footers(win32.constants.wdHeaderFooterPrimary),
|
|
section.Footers(win32.constants.wdHeaderFooterFirstPage),
|
|
section.Footers(win32.constants.wdHeaderFooterEvenPages)
|
|
])
|
|
elif replace_area == 'header':
|
|
sections = doc.Sections
|
|
parts = []
|
|
for section in sections:
|
|
parts.extend([
|
|
section.Headers(win32.constants.wdHeaderFooterPrimary),
|
|
section.Headers(win32.constants.wdHeaderFooterFirstPage),
|
|
section.Headers(win32.constants.wdHeaderFooterEvenPages)
|
|
])
|
|
elif replace_area == 'text':
|
|
parts = [doc.Content] # Verwenden Sie 'Content' für den Haupttextbereich
|
|
else:
|
|
print("Ungültige Auswahl. Bereich muss 'Header', 'Footer' oder 'Text' sein.")
|
|
doc.Close()
|
|
continue
|
|
|
|
for part in parts:
|
|
# Direkt auf das Range-Objekt zugreifen und Find- und Replace-Methoden anwenden
|
|
rng = part.Range if hasattr(part, 'Range') else part
|
|
|
|
# Find- und Replace-Objekt nutzen
|
|
find = rng.Find
|
|
find.Text = find_text
|
|
find.Replacement.Text = replace_text
|
|
find.Forward = True
|
|
find.Wrap = win32.constants.wdFindContinue
|
|
find.Format = False # Keine Formatierung ändern
|
|
find.MatchCase = False # Groß-/Kleinschreibung ignorieren
|
|
find.MatchWholeWord = False # Auch Teile von Wörtern ersetzen
|
|
find.Execute(Replace=win32.constants.wdReplaceAll)
|
|
|
|
# Überprüfung von Textfeldern innerhalb von Headern oder Footern
|
|
if replace_area in ['header', 'footer']:
|
|
for shape in part.Shapes:
|
|
if shape.TextFrame.HasText:
|
|
shape_rng = shape.TextFrame.TextRange
|
|
shape_find = shape_rng.Find
|
|
shape_find.Text = find_text
|
|
shape_find.Replacement.Text = replace_text
|
|
shape_find.Forward = True
|
|
shape_find.Wrap = win32.constants.wdFindContinue
|
|
shape_find.MatchCase = False
|
|
shape_find.Execute(Replace=win32.constants.wdReplaceAll)
|
|
|
|
# Überprüfung von Tabellen innerhalb des Range-Objekts
|
|
for table in rng.Tables:
|
|
for row in table.Rows:
|
|
for cell in row.Cells:
|
|
cell_find = cell.Range.Find
|
|
cell_find.Text = find_text
|
|
cell_find.Replacement.Text = replace_text
|
|
cell_find.Forward = True
|
|
cell_find.Wrap = win32.constants.wdFindContinue
|
|
cell_find.MatchCase = False
|
|
cell_find.Execute(Replace=win32.constants.wdReplaceAll)
|
|
|
|
# Geändertes Dokument speichern
|
|
output_path = os.path.join(output_folder, filename)
|
|
doc.SaveAs(output_path, FileFormat=win32.constants.wdFormatXMLTemplate)
|
|
doc.Close()
|
|
print(f"Bearbeitung von {filename} abgeschlossen.")
|
|
|
|
except Exception as e:
|
|
print(f"Fehler beim Verarbeiten der Datei {filename}: {e}")
|
|
if 'doc' in locals():
|
|
doc.Close()
|
|
|
|
# Word-Anwendung beenden
|
|
word.Quit()
|
|
|
|
print("Skript abgeschlossen.")
|