Konvertierung kommunikation

Aus HB9FDZ
Version vom 17. September 2025, 09:41 Uhr von Thomas (Diskussion | Beiträge) (Die Seite wurde neu angelegt: „= Automatisierte Adressfilterung & XLS-Konvertierung = == Zweck == Dieses Python-Skript automatisiert die Verarbeitung einer Kommunikations-Exportdatei im alten Excel-Format (.xls). Es konvertiert die Datei in das moderne .xlsx-Format, filtert gültige E-Mail-Adressen und entfernt unerwünschte Typen und Fax-Werte. Anschließend wird eine gefilterte Adressliste exportiert und optional die Quelldatei sowie die konvertierte Datei gelöscht. == Voraussetzu…“)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Zur Navigation springen Zur Suche springen

Automatisierte Adressfilterung & XLS-Konvertierung

[Bearbeiten | Quelltext bearbeiten]

Dieses Python-Skript automatisiert die Verarbeitung einer Kommunikations-Exportdatei im alten Excel-Format (.xls). Es konvertiert die Datei in das moderne .xlsx-Format, filtert gültige E-Mail-Adressen und entfernt unerwünschte Typen und Fax-Werte. Anschließend wird eine gefilterte Adressliste exportiert und optional die Quelldatei sowie die konvertierte Datei gelöscht.

Voraussetzungen

[Bearbeiten | Quelltext bearbeiten]
  • Windows-System mit installiertem Microsoft Excel
  • Python 3.x
  • Installierte Python-Module:
  pip install pandas openpyxl pywin32
import pandas as pd
import os
import sys
from pathlib import Path
import win32com.client as win32

# j/n-Abfrage
def jn(prompt: str) -> bool:
    return input(f"{prompt} (j/n): ").strip().lower() == "j"

# String-Bereinigung
def clean_str_series(s: pd.Series) -> pd.Series:
    return s.astype(str).str.strip().str.replace("\x00", "", regex=False)

# XLS → XLSX Konvertierung
def convert_xls_to_xlsx(xls_path: Path) -> Path:
    print("→ Konvertiere .xls in .xlsx...")
    excel = win32.gencache.EnsureDispatch('Excel.Application')
    excel.Visible = False
    wb = excel.Workbooks.Open(str(xls_path))
    xlsx_path = xls_path.with_suffix('.xlsx')
    wb.SaveAs(str(xlsx_path), FileFormat=51)
    wb.Close(False)
    excel.Quit()
    print(f"→ Konvertierung erfolgreich: {xlsx_path}")
    return xlsx_path

# Pfade
quelldatei = Path(r"C:\kommunikation\Export der Kommunikation für Excel.xls")
export_pfad = Path(r"C:\kommunikation")
export_pfad.mkdir(parents=True, exist_ok=True)
export_datei = export_pfad / "newsletter_adressen_gefiltert.xlsx"

# Schritt 0: Datei prüfen
while not quelldatei.exists():
    print(f"⚠️ Quelldatei nicht gefunden: {quelldatei}")
    if jn("Möchtest du es später erneut versuchen?"):
        input("→ Bitte Datei bereitstellen und mit Enter bestätigen...")
    else:
        print("→ Skript wird beendet.")
        sys.exit()

# Schritt 1: Konvertieren
xlsx_datei = convert_xls_to_xlsx(quelldatei)

# Schritt 2: Laden
print("→ Lade konvertierte Datei...")
try:
    df = pd.read_excel(xlsx_datei, engine="openpyxl")
except Exception as e:
    print(f"⚠️ Fehler beim Einlesen: {e}")
    print("Tipp: pip install openpyxl")
    sys.exit()
print(f"→ Datei geladen: {len(df)} Zeilen")

# Schritt 3: E-Mail filtern
emails = clean_str_series(df["E-Mail"])
df = df[emails.str.contains("@") & ~emails.str.contains(r"\s")].copy()
print(f"→ {len(df)} gültige E-Mail-Adressen")

# Schritt 4: Typ/Fax filtern
typ1 = clean_str_series(df["Typ - 1"])
typ13 = clean_str_series(df["Typ - 13"])
typ20 = clean_str_series(df["Typ - 20"])
fax = clean_str_series(df["Fax"])

filterbedingungen = (
    typ1.isin(["H", "L"]) |
    (typ13 == "V") |
    typ20.isin(["O", "X"]) |
    (fax == "$")
)

df_gefiltert = df[~filterbedingungen].copy()
print(f"→ {len(df_gefiltert)} Adressen nach Filterung")

# Schritt 5: Spalten extrahieren
df_export = df_gefiltert[["Adressnr", "Name", "Vorname", "E-Mail"]].copy()
print(f"→ {df_export.shape[0]} Adressen für Export")

# Schritt 6: Export
try:
    df_export.to_excel(export_datei, index=False)
    print(f"→ Export erfolgreich: {export_datei}")
except Exception as e:
    print(f"⚠️ Fehler beim Speichern: {e}")
    print("Tipp: pip install openpyxl")
    sys.exit()

# Schritt 7: Löschabfrage
if jn("Möchtest du die Quelldatei und die konvertierte Datei löschen?"):
    try:
        os.remove(quelldatei)
        print("→ Quelldatei gelöscht.")
    except Exception as e:
        print(f"⚠️ Fehler beim Löschen der Quelldatei: {e}")
    try:
        os.remove(xlsx_datei)
        print("→ Konvertierte Datei gelöscht.")
    except Exception as e:
        print(f"⚠️ Fehler beim Löschen der konvertierten Datei: {e}")
else:
    print("→ Keine Datei wurde gelöscht.")
  • Skript lokal speichern, z. B. als export.py
  • Desktop-Verknüpfung erstellen für schnellen Zugriff
  • Doppelklick genügt – das Skript erledigt alles automatisch
  • Zeitstempel im Exportnamen
  • Automatischer E-Mail-Versand
  • Integration in Aufgabenplaner
  • Logging in Textdatei

Dieses Skript steht unter der GNU-Lizenz für freie Dokumentation.