<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki.hb9fdz.ch//index.php?action=history&amp;feed=atom&amp;title=Konvertierung_kommunikation</id>
	<title>Konvertierung kommunikation - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.hb9fdz.ch//index.php?action=history&amp;feed=atom&amp;title=Konvertierung_kommunikation"/>
	<link rel="alternate" type="text/html" href="https://wiki.hb9fdz.ch//index.php?title=Konvertierung_kommunikation&amp;action=history"/>
	<updated>2026-06-13T08:46:54Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in HB9FDZ</subtitle>
	<generator>MediaWiki 1.45.0</generator>
	<entry>
		<id>https://wiki.hb9fdz.ch//index.php?title=Konvertierung_kommunikation&amp;diff=844&amp;oldid=prev</id>
		<title>Thomas: Die Seite wurde neu angelegt: „= Automatisierte Adressfilterung &amp; 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…“</title>
		<link rel="alternate" type="text/html" href="https://wiki.hb9fdz.ch//index.php?title=Konvertierung_kommunikation&amp;diff=844&amp;oldid=prev"/>
		<updated>2025-09-17T09:41:05Z</updated>

		<summary type="html">&lt;p&gt;Die Seite wurde neu angelegt: „= Automatisierte Adressfilterung &amp;amp; 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…“&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;= Automatisierte Adressfilterung &amp;amp; XLS-Konvertierung =&lt;br /&gt;
&lt;br /&gt;
== Zweck ==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== Voraussetzungen ==&lt;br /&gt;
* Windows-System mit installiertem Microsoft Excel&lt;br /&gt;
* Python 3.x&lt;br /&gt;
* Installierte Python-Module:&lt;br /&gt;
  &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  pip install pandas openpyxl pywin32&lt;br /&gt;
  &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Skript ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import pandas as pd&lt;br /&gt;
import os&lt;br /&gt;
import sys&lt;br /&gt;
from pathlib import Path&lt;br /&gt;
import win32com.client as win32&lt;br /&gt;
&lt;br /&gt;
# j/n-Abfrage&lt;br /&gt;
def jn(prompt: str) -&amp;gt; bool:&lt;br /&gt;
    return input(f&amp;quot;{prompt} (j/n): &amp;quot;).strip().lower() == &amp;quot;j&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# String-Bereinigung&lt;br /&gt;
def clean_str_series(s: pd.Series) -&amp;gt; pd.Series:&lt;br /&gt;
    return s.astype(str).str.strip().str.replace(&amp;quot;\x00&amp;quot;, &amp;quot;&amp;quot;, regex=False)&lt;br /&gt;
&lt;br /&gt;
# XLS → XLSX Konvertierung&lt;br /&gt;
def convert_xls_to_xlsx(xls_path: Path) -&amp;gt; Path:&lt;br /&gt;
    print(&amp;quot;→ Konvertiere .xls in .xlsx...&amp;quot;)&lt;br /&gt;
    excel = win32.gencache.EnsureDispatch(&amp;#039;Excel.Application&amp;#039;)&lt;br /&gt;
    excel.Visible = False&lt;br /&gt;
    wb = excel.Workbooks.Open(str(xls_path))&lt;br /&gt;
    xlsx_path = xls_path.with_suffix(&amp;#039;.xlsx&amp;#039;)&lt;br /&gt;
    wb.SaveAs(str(xlsx_path), FileFormat=51)&lt;br /&gt;
    wb.Close(False)&lt;br /&gt;
    excel.Quit()&lt;br /&gt;
    print(f&amp;quot;→ Konvertierung erfolgreich: {xlsx_path}&amp;quot;)&lt;br /&gt;
    return xlsx_path&lt;br /&gt;
&lt;br /&gt;
# Pfade&lt;br /&gt;
quelldatei = Path(r&amp;quot;C:\kommunikation\Export der Kommunikation für Excel.xls&amp;quot;)&lt;br /&gt;
export_pfad = Path(r&amp;quot;C:\kommunikation&amp;quot;)&lt;br /&gt;
export_pfad.mkdir(parents=True, exist_ok=True)&lt;br /&gt;
export_datei = export_pfad / &amp;quot;newsletter_adressen_gefiltert.xlsx&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Schritt 0: Datei prüfen&lt;br /&gt;
while not quelldatei.exists():&lt;br /&gt;
    print(f&amp;quot;⚠️ Quelldatei nicht gefunden: {quelldatei}&amp;quot;)&lt;br /&gt;
    if jn(&amp;quot;Möchtest du es später erneut versuchen?&amp;quot;):&lt;br /&gt;
        input(&amp;quot;→ Bitte Datei bereitstellen und mit Enter bestätigen...&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;→ Skript wird beendet.&amp;quot;)&lt;br /&gt;
        sys.exit()&lt;br /&gt;
&lt;br /&gt;
# Schritt 1: Konvertieren&lt;br /&gt;
xlsx_datei = convert_xls_to_xlsx(quelldatei)&lt;br /&gt;
&lt;br /&gt;
# Schritt 2: Laden&lt;br /&gt;
print(&amp;quot;→ Lade konvertierte Datei...&amp;quot;)&lt;br /&gt;
try:&lt;br /&gt;
    df = pd.read_excel(xlsx_datei, engine=&amp;quot;openpyxl&amp;quot;)&lt;br /&gt;
except Exception as e:&lt;br /&gt;
    print(f&amp;quot;⚠️ Fehler beim Einlesen: {e}&amp;quot;)&lt;br /&gt;
    print(&amp;quot;Tipp: pip install openpyxl&amp;quot;)&lt;br /&gt;
    sys.exit()&lt;br /&gt;
print(f&amp;quot;→ Datei geladen: {len(df)} Zeilen&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# Schritt 3: E-Mail filtern&lt;br /&gt;
emails = clean_str_series(df[&amp;quot;E-Mail&amp;quot;])&lt;br /&gt;
df = df[emails.str.contains(&amp;quot;@&amp;quot;) &amp;amp; ~emails.str.contains(r&amp;quot;\s&amp;quot;)].copy()&lt;br /&gt;
print(f&amp;quot;→ {len(df)} gültige E-Mail-Adressen&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# Schritt 4: Typ/Fax filtern&lt;br /&gt;
typ1 = clean_str_series(df[&amp;quot;Typ - 1&amp;quot;])&lt;br /&gt;
typ13 = clean_str_series(df[&amp;quot;Typ - 13&amp;quot;])&lt;br /&gt;
typ20 = clean_str_series(df[&amp;quot;Typ - 20&amp;quot;])&lt;br /&gt;
fax = clean_str_series(df[&amp;quot;Fax&amp;quot;])&lt;br /&gt;
&lt;br /&gt;
filterbedingungen = (&lt;br /&gt;
    typ1.isin([&amp;quot;H&amp;quot;, &amp;quot;L&amp;quot;]) |&lt;br /&gt;
    (typ13 == &amp;quot;V&amp;quot;) |&lt;br /&gt;
    typ20.isin([&amp;quot;O&amp;quot;, &amp;quot;X&amp;quot;]) |&lt;br /&gt;
    (fax == &amp;quot;$&amp;quot;)&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
df_gefiltert = df[~filterbedingungen].copy()&lt;br /&gt;
print(f&amp;quot;→ {len(df_gefiltert)} Adressen nach Filterung&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# Schritt 5: Spalten extrahieren&lt;br /&gt;
df_export = df_gefiltert[[&amp;quot;Adressnr&amp;quot;, &amp;quot;Name&amp;quot;, &amp;quot;Vorname&amp;quot;, &amp;quot;E-Mail&amp;quot;]].copy()&lt;br /&gt;
print(f&amp;quot;→ {df_export.shape[0]} Adressen für Export&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# Schritt 6: Export&lt;br /&gt;
try:&lt;br /&gt;
    df_export.to_excel(export_datei, index=False)&lt;br /&gt;
    print(f&amp;quot;→ Export erfolgreich: {export_datei}&amp;quot;)&lt;br /&gt;
except Exception as e:&lt;br /&gt;
    print(f&amp;quot;⚠️ Fehler beim Speichern: {e}&amp;quot;)&lt;br /&gt;
    print(&amp;quot;Tipp: pip install openpyxl&amp;quot;)&lt;br /&gt;
    sys.exit()&lt;br /&gt;
&lt;br /&gt;
# Schritt 7: Löschabfrage&lt;br /&gt;
if jn(&amp;quot;Möchtest du die Quelldatei und die konvertierte Datei löschen?&amp;quot;):&lt;br /&gt;
    try:&lt;br /&gt;
        os.remove(quelldatei)&lt;br /&gt;
        print(&amp;quot;→ Quelldatei gelöscht.&amp;quot;)&lt;br /&gt;
    except Exception as e:&lt;br /&gt;
        print(f&amp;quot;⚠️ Fehler beim Löschen der Quelldatei: {e}&amp;quot;)&lt;br /&gt;
    try:&lt;br /&gt;
        os.remove(xlsx_datei)&lt;br /&gt;
        print(&amp;quot;→ Konvertierte Datei gelöscht.&amp;quot;)&lt;br /&gt;
    except Exception as e:&lt;br /&gt;
        print(f&amp;quot;⚠️ Fehler beim Löschen der konvertierten Datei: {e}&amp;quot;)&lt;br /&gt;
else:&lt;br /&gt;
    print(&amp;quot;→ Keine Datei wurde gelöscht.&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Nutzung ==&lt;br /&gt;
* Skript lokal speichern, z. B. als &amp;lt;code&amp;gt;export.py&amp;lt;/code&amp;gt;&lt;br /&gt;
* Desktop-Verknüpfung erstellen für schnellen Zugriff&lt;br /&gt;
* Doppelklick genügt – das Skript erledigt alles automatisch&lt;br /&gt;
&lt;br /&gt;
== Erweiterungen ==&lt;br /&gt;
* Zeitstempel im Exportnamen&lt;br /&gt;
* Automatischer E-Mail-Versand&lt;br /&gt;
* Integration in Aufgabenplaner&lt;br /&gt;
* Logging in Textdatei&lt;br /&gt;
&lt;br /&gt;
== Lizenz ==&lt;br /&gt;
Dieses Skript steht unter der GNU-Lizenz für freie Dokumentation.&lt;/div&gt;</summary>
		<author><name>Thomas</name></author>
	</entry>
</feed>