package excelread import ( "encoding/csv" "fmt" "log" "os" "strconv" "strings" ) // mapRowToStruct konvertiert eine einzelne CSV-Zeile (als []string) // in die EmployeeDataRow-Struct. func mapRowToStruct(row []string) EmployeeDataRow { data := EmployeeDataRow{} data.Personalnummer = parseInt(row[0]) data.Nachname = strings.TrimSpace(row[1]) data.Vorname = strings.TrimSpace(row[2]) data.Vertragsart = strings.TrimSpace(row[3]) data.HatPersonenbefoerderungsschein = strings.TrimSpace(row[4]) data.HatRechtAufZuschlaege = strings.TrimSpace(row[5]) data.Vertragsstart = strings.TrimSpace(row[6]) data.VertragstageProWoche = parseFloat(row[7]) data.VertragsstundenProWoche = parseFloat(row[8]) data.VertragsstundenMax = strings.TrimSpace(row[9]) data.UrlaubstageProJahr = parseFloat(row[10]) data.GearbeiteteTage = parseFloat(row[11]) data.GearbeiteteStunden = parseFloat(row[12]) data.GenommeneUrlaubstage = parseFloat(row[13]) data.GenommeneUrlaubsstunden = parseFloat(row[14]) data.Krankheitstage = parseFloat(row[15]) data.Krankheitsstunden = parseFloat(row[16]) // data.KrankengeldTage = parseFloat(row[17]) // data.KrankengeldStunden = parseFloat(row[18]) // data.UnbezahlterUrlaubTage = parseFloat(row[19]) // data.UnbezahlterUrlaubStunden = parseFloat(row[20]) data.IstSollGesamtTage = parseFloat(row[17]) data.IstSollGesamtStunden = parseFloat(row[18]) data.IstSollVertragsTage = parseFloat(row[19]) data.IstSollVertragsStunden = parseFloat(row[20]) data.IstSollPlusMinusStunden = parseFloat(row[21]) data.BerechnungMehrstunden = parseFloat(row[22]) data.BerechnungUeberstunden = parseFloat(row[23]) data.BerechnungAnzahlPSchein = parseFloat(row[24]) data.BerechnungKrankOhneAUTage = parseFloat(row[25]) data.BerechnungKrankOhneAUStunden = parseFloat(row[26]) data.BerechnungNachtzuschlag25Tage = parseFloat(row[27]) data.BerechnungNachtzuschlag25Stunden = parseFloat(row[28]) data.BerechnungNachtzuschlag40Tage = parseFloat(row[29]) data.BerechnungNachtzuschlag40Stunden = parseFloat(row[30]) data.BerechnungSonntagszuschlag50Tage = parseFloat(row[31]) data.BerechnungSonntagszuschlag50Stunden = parseFloat(row[32]) data.BerechnungVerpflegungspauschale14Tage = parseFloat(row[33]) data.BerechnungSamstagszuschlag15Tage = parseFloat(row[34]) data.BerechnungSamstagszuschlag15Stunden = parseFloat(row[35]) data.BerechnungZeitausgleichStart = parseFloat(row[36]) data.BerechnungZeitausgleichPlusMinus = parseFloat(row[37]) data.BerechnungZeitausgleichAenderungen = parseFloat(row[38]) data.BerechnungZeitausgleichAuszahlen = parseFloat(row[39]) data.BerechnungZeitausgleichJetzt = parseFloat(row[40]) data.SaldenUrlaubStart = parseFloat(row[41]) data.SaldenUrlaubAbbau = parseFloat(row[42]) data.SaldenUrlaubKorrektur = parseFloat(row[43]) data.SaldenUrlaubJetzt = parseFloat(row[44]) data.SaldenMehrstunden = parseFloat(row[45]) data.SaldenUeberstunden = parseFloat(row[46]) data.AuszahlenFahrtkostenKm = parseFloat(row[47]) data.AuszahlenVerpflegungspauschaleTage = parseFloat(row[48]) data.AuszahlenAnzahlPSchein = parseFloat(row[49]) data.AuszahlenZuschlag25Stunden = parseFloat(row[50]) data.AuszahlenZuschlag40Stunden = parseFloat(row[51]) data.AuszahlenZuschlag50Stunden = parseFloat(row[52]) data.AuszahlenZuschlag14Stunden = parseFloat(row[53]) data.AuszahlenZuschlag15Stunden = parseFloat(row[54]) return data } // map from: July 2025 // func mapRowToStruct(row []string) EmployeeDataRow { // data := EmployeeDataRow{} // data.Personalnummer = parseInt(row[0]) // data.Nachname = strings.TrimSpace(row[1]) // data.Vorname = strings.TrimSpace(row[2]) // data.Vertragsart = strings.TrimSpace(row[3]) // data.HatPersonenbefoerderungsschein = strings.TrimSpace(row[4]) // data.HatRechtAufZuschlaege = strings.TrimSpace(row[5]) // data.Vertragsstart = strings.TrimSpace(row[6]) // data.VertragstageProWoche = parseFloat(row[7]) // data.VertragsstundenProWoche = parseFloat(row[8]) // data.VertragsstundenMax = strings.TrimSpace(row[9]) // data.UrlaubstageProJahr = parseFloat(row[10]) // data.GearbeiteteTage = parseFloat(row[11]) // data.GearbeiteteStunden = parseFloat(row[12]) // data.GenommeneUrlaubstage = parseFloat(row[13]) // data.GenommeneUrlaubsstunden = parseFloat(row[14]) // data.Krankheitstage = parseFloat(row[15]) // data.Krankheitsstunden = parseFloat(row[16]) // data.KrankengeldTage = parseFloat(row[17]) // data.KrankengeldStunden = parseFloat(row[18]) // data.UnbezahlterUrlaubTage = parseFloat(row[19]) // data.UnbezahlterUrlaubStunden = parseFloat(row[20]) // data.IstSollGesamtTage = parseFloat(row[21]) // data.IstSollGesamtStunden = parseFloat(row[22]) // data.IstSollVertragsTage = parseFloat(row[23]) // data.IstSollVertragsStunden = parseFloat(row[24]) // data.IstSollPlusMinusStunden = parseFloat(row[25]) // data.BerechnungMehrstunden = parseFloat(row[26]) // data.BerechnungUeberstunden = parseFloat(row[27]) // data.BerechnungAnzahlPSchein = parseFloat(row[28]) // data.BerechnungKrankOhneAUTage = parseFloat(row[29]) // data.BerechnungKrankOhneAUStunden = parseFloat(row[30]) // data.BerechnungNachtzuschlag25Tage = parseFloat(row[31]) // data.BerechnungNachtzuschlag25Stunden = parseFloat(row[32]) // data.BerechnungNachtzuschlag40Tage = parseFloat(row[33]) // data.BerechnungNachtzuschlag40Stunden = parseFloat(row[34]) // data.BerechnungSonntagszuschlag50Tage = parseFloat(row[35]) // data.BerechnungSonntagszuschlag50Stunden = parseFloat(row[36]) // data.BerechnungVerpflegungspauschale14Tage = parseFloat(row[37]) // data.BerechnungSamstagszuschlag15Tage = parseFloat(row[38]) // data.BerechnungSamstagszuschlag15Stunden = parseFloat(row[39]) // data.BerechnungZeitausgleichStart = parseFloat(row[40]) // data.BerechnungZeitausgleichPlusMinus = parseFloat(row[41]) // data.BerechnungZeitausgleichAenderungen = parseFloat(row[42]) // data.BerechnungZeitausgleichAuszahlen = parseFloat(row[43]) // data.BerechnungZeitausgleichJetzt = parseFloat(row[44]) // data.SaldenUrlaubStart = parseFloat(row[45]) // data.SaldenUrlaubAbbau = parseFloat(row[46]) // data.SaldenUrlaubJetzt = parseFloat(row[47]) // data.SaldenMehrstunden = parseFloat(row[48]) // data.SaldenUeberstunden = parseFloat(row[49]) // data.AuszahlenFahrtkostenKm = parseFloat(row[50]) // data.AuszahlenVerpflegungspauschaleTage = parseFloat(row[51]) // data.AuszahlenAnzahlPSchein = parseFloat(row[52]) // data.AuszahlenZuschlag25Stunden = parseFloat(row[53]) // data.AuszahlenZuschlag40Stunden = parseFloat(row[54]) // data.AuszahlenZuschlag50Stunden = parseFloat(row[55]) // data.AuszahlenZuschlag14Stunden = parseFloat(row[56]) // data.AuszahlenZuschlag15Stunden = parseFloat(row[57]) // return data // } func ReadEmployeeData() []EmployeeDataRow { content, err := os.ReadFile("daten.csv") if err != nil { log.Fatalf("Fehler beim Lesen der Datei: %v", err) } reader := csv.NewReader(strings.NewReader(string(content))) reader.Comma = ';' reader.FieldsPerRecord = -1 records, err := reader.ReadAll() if err != nil { log.Fatalf("Fehler beim Parsen der CSV: %v", err) } if len(records) < 5 { log.Fatal("Die CSV-Datei hat nicht genügend Zeilen.") } dataRows := records[3 : len(records)-1] var employees []EmployeeDataRow for i, row := range dataRows { fmt.Printf("%v", len(row)) if row[1] != "Shahrasebi" { employee := mapRowToStruct(row) employees = append(employees, employee) fmt.Printf("Zeile %d geladen: %s, %s\n", i+4, employee.Nachname, employee.Vorname) } } fmt.Printf("\n--- Insgesamt %d Mitarbeiterdatensätze erfolgreich geladen. ---\n", len(employees)) return employees } // Helfer-Funktion, um Strings mit Komma als Dezimaltrennzeichen in float64 umzuwandeln. func parseFloat(s string) float64 { s = strings.TrimSpace(s) if s == "" { return 0.0 } // Ersetze das Komma durch einen Punkt für die Standard-Konvertierung s = strings.Replace(s, ",", ".", 1) val, err := strconv.ParseFloat(s, 64) if err != nil { return 0.0 // Bei Fehler einfach 0 zurückgeben } return val } // Helfer-Funktion, um einen String in einen Integer umzuwandeln. func parseInt(s string) int { s = strings.TrimSpace(s) if s == "" { return 0 } val, err := strconv.Atoi(s) if err != nil { return 0 } return val }