added files
This commit is contained in:
parent
b031d974cc
commit
64f1a77548
108
dotx_processor.py
Normal file
108
dotx_processor.py
Normal file
@ -0,0 +1,108 @@
|
|||||||
|
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.")
|
43
setup_environment.py
Normal file
43
setup_environment.py
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
import os
|
||||||
|
import subprocess
|
||||||
|
import sys
|
||||||
|
|
||||||
|
def run_command(command):
|
||||||
|
"""Führt einen Shell-Befehl aus und gibt das Ergebnis zurück."""
|
||||||
|
try:
|
||||||
|
subprocess.check_call(command, shell=True)
|
||||||
|
except subprocess.CalledProcessError as e:
|
||||||
|
print(f"Fehler beim Ausführen des Befehls: {e}")
|
||||||
|
|
||||||
|
def ensure_pip():
|
||||||
|
"""Stellt sicher, dass pip installiert ist."""
|
||||||
|
try:
|
||||||
|
import pip
|
||||||
|
print("pip ist bereits installiert.")
|
||||||
|
except ImportError:
|
||||||
|
print("pip nicht gefunden. Installiere pip...")
|
||||||
|
run_command("py -m ensurepip --upgrade")
|
||||||
|
run_command("py -m pip install --upgrade pip")
|
||||||
|
|
||||||
|
def install_package(package):
|
||||||
|
"""Installiert ein Python-Paket mit pip."""
|
||||||
|
run_command(f"py -m pip install {package}")
|
||||||
|
|
||||||
|
def setup_environment():
|
||||||
|
"""Überprüft und installiert die notwendigen Pakete."""
|
||||||
|
ensure_pip()
|
||||||
|
|
||||||
|
# Liste der erforderlichen Pakete
|
||||||
|
required_packages = ["pywin32"]
|
||||||
|
|
||||||
|
for package in required_packages:
|
||||||
|
try:
|
||||||
|
__import__(package)
|
||||||
|
print(f"{package} ist bereits installiert.")
|
||||||
|
except ImportError:
|
||||||
|
print(f"{package} wird installiert...")
|
||||||
|
install_package(package)
|
||||||
|
print(f"{package} wurde erfolgreich installiert.")
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
setup_environment()
|
Loading…
Reference in New Issue
Block a user