Anwesenheit PDF Generator
Liest Anwesenheitsdaten aus einer Excel-Datei (.xlsx) und erzeugt für jeden Teilnehmer eine ausgefüllte PDF-Datei (SAB-Formular).
Voraussetzungen
- Python 3.10 oder höher
- pip
Installation
# Abhängigkeiten installieren
pip install -r requirements.txt
Für Entwicklung inkl. Tests:
pip install -r requirements-dev.txt
Konfiguration
Vor dem ersten Start müssen zwei Werte in config.json eingetragen werden:
| Feld | Beschreibung |
|---|---|
antragsnummer |
SAB-Antragsnummer der Einrichtung |
ort |
Ort für die Unterschriftszeile im PDF |
Alle anderen Felder sind vorbelegt und müssen nur bei abweichender Excel-Struktur angepasst werden.
Verzeichnisstruktur
generate.py ← Einstiegspunkt
config.json ← Konfiguration
input/ ← Excel-Dateien ablegen
template/
sab.pdf ← PDF-Vorlage (muss vorhanden sein)
output/ ← Generierte PDFs (werden hier abgelegt)
Verwendung
Generierung starten
python generate.py generate --file "input/Anwesenheitsliste 2026.xlsx" --month Feb
Das Programm zeigt vor der Generierung eine Vorschau und fragt zur Bestätigung:
=== Vorschau der ermittelten Werte ===
Excel-Datei : Anwesenheitsliste 2026.xlsx
Jahr : 2026
Monat : Feb (02)
Antragsnummer : 12345
Ort : Leipzig
Erstelldatum : 27.03.2026
Teilnehmer : 49
Fehler : 0
Möchten Sie die PDF-Generierung starten? [j/N]
Nur bei Eingabe von j werden PDFs geschrieben.
Nur Validierung (keine PDFs erzeugen)
python generate.py validate --file "input/Anwesenheitsliste 2026.xlsx" --month Feb
Führt alle Prüfungen durch und zeigt die Vorschau — ohne Dateien zu schreiben.
Optionen
generate
| Option | Pflicht | Beschreibung |
|---|---|---|
--file |
ja | Pfad zur Excel-Datei |
--month |
ja | Name des Monats-Sheets (z. B. Jan, Feb, Mrz, Apr …) |
--out |
nein | Ausgabeverzeichnis (Standard: output/ aus config.json) |
validate
| Option | Pflicht | Beschreibung |
|---|---|---|
--file |
ja | Pfad zur Excel-Datei |
--month |
ja | Name des Monats-Sheets |
Sheet-Namen
Die deutschen Monatsabkürzungen entsprechen den Tabellenblatt-Namen in der Excel-Datei:
| Sheet | Monat |
|---|---|
Jan |
Januar |
Feb |
Februar |
Mrz |
März |
Apr |
April |
Mai |
Mai |
Jun |
Juni |
Jul |
Juli |
Aug |
August |
Sep |
September |
Okt |
Oktober |
Nov |
November |
Dez |
Dezember |
Ausgabe
Für jeden Teilnehmer wird eine PDF-Datei erstellt:
output/
(1) Mustermann, Max.pdf
(2) Beispiel, Anna.pdf
...
Die laufende Nummer entspricht der Nummerierung in Spalte A der Excel-Datei.
Tests ausführen
pytest tests/ -v
Die Tests benötigen keine echten Excel- oder PDF-Dateien und laufen vollständig mit synthetischen Daten.
Validierungsprüfungen
Das Programm prüft vor jeder Generierung:
config.jsonvorhanden und vollständig- Excel-Datei existiert und ist eine
.xlsx/.xlsm-Datei - Jahr aus Dateiname extrahierbar (z. B.
Anwesenheitsliste 2026.xlsx) - Sheet-Name bekannt (in
month_mappingderconfig.json) - Sheet existiert in der Arbeitsmappe
- Spalte A (lfd. Nummer) enthält Daten
- Headerzeile mit
Name, Vornamegefunden - Tagesspalten ab Spaltenindex 9 vorhanden
- PDF-Template unter
template/sab.pdferreichbar