Teamprojekt · Station 9 von 10

ROBIN

Ein Werkzeug, das Excel-Teilnehmerlisten in eine PostgreSQL-Datenbank überträgt. Teamprojekt zu zweit.

ROBIN

Ziel

Teilnehmerdaten aus Excel zuverlässig und ohne Handarbeit in die Datenbank bringen.

Umsetzung

  • Mein Teil war das Backend: Excel-Dateien einlesen, die Daten aufbereiten und in die Datenbank schreiben.
  • Verbindung zu PostgreSQL über einen SSH-Tunnel, mit Konfiguration, Fehlerbehandlung und Protokoll.
  • Die Oberfläche (Import, Vorschau, Export, Animationen) hat mein Teampartner gebaut.

Code

Die Kopfzeile der Excel-Datei finden

data_processor.py
def _find_header_and_indices(self, raw_rows: List[List[Any]]) -> Tuple[int, Dict[str, int]]:
    for i, row in enumerate(raw_rows[:50]):
        cleaned_row = [str(cell).strip() if cell is not None else "" for cell in row]

        if "Vorname" in cleaned_row and "Name" in cleaned_row:
            try:
                return i, {
                    "reha": cleaned_row.index("TN-Nr"),
                    "last_name": cleaned_row.index("Name"),
                    "first_name": cleaned_row.index("Vorname"),
                    "email": cleaned_row.index("Email2"),
                    "specialization": cleaned_row.index("Massnahme Nr"),
                    "course": cleaned_row.index("Ausbildungsgruppe")
                }
            except ValueError as e:
                raise ValueError(f"Fehler 102|Zeile {i + 1}")

    raise ValueError("Fehler 102")

Das Backend sucht in den ersten 50 Zeilen die Spalten und meldet fehlende mit Fehlercode und Zeile.

Was ich gelernt habe

Im Team Schnittstellen abzustimmen: Das Backend muss so klar sein, dass die Oberfläche es ohne Rückfragen nutzen kann.

Es ist ein unerwarteter Fehler aufgetreten. Neu laden 🗙

Verbindung wird wiederhergestellt …

Verbindung fehlgeschlagen. Nächster Versuch in Sekunden.

Verbindung fehlgeschlagen. Bitte erneut versuchen oder die Seite neu laden.

Die Sitzung wurde vom Server pausiert.

Die Sitzung konnte nicht fortgesetzt werden. Bitte erneut versuchen oder die Seite neu laden.