added files

This commit is contained in:
Tim Müller 2024-08-30 08:44:21 +00:00
parent b031d974cc
commit 64f1a77548
2 changed files with 151 additions and 0 deletions

108
dotx_processor.py Normal file
View 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
View 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()