Konvertierung kommunikation
Automatisierte Adressfilterung & XLS-Konvertierung
[Bearbeiten | Quelltext bearbeiten]Zweck
[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
Skript
[Bearbeiten | Quelltext bearbeiten]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.")
Nutzung
[Bearbeiten | Quelltext bearbeiten]- Skript lokal speichern, z. B. als
export.py - Desktop-Verknüpfung erstellen für schnellen Zugriff
- Doppelklick genügt – das Skript erledigt alles automatisch
Erweiterungen
[Bearbeiten | Quelltext bearbeiten]- Zeitstempel im Exportnamen
- Automatischer E-Mail-Versand
- Integration in Aufgabenplaner
- Logging in Textdatei
Lizenz
[Bearbeiten | Quelltext bearbeiten]Dieses Skript steht unter der GNU-Lizenz für freie Dokumentation.