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.")