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