import openpyxl from datetime import datetime datei = "Kopie von Kostenrechnung der Nächsten jahre (3).xlsx" print(f"Lade {datei}...") wb = openpyxl.load_workbook(datei, data_only=True) ws = wb["Tilgung bei Gleichbleibenden Be"] # Zeile 1: Kreditnamen # Zeile 2: Headers print("\n=== KREDIT-STRUKTUR (Zeile 1 & 2) ===") # Lese Zeile 1 und 2 row1 = list(ws.iter_rows(min_row=1, max_row=1, values_only=True))[0] row2 = list(ws.iter_rows(min_row=2, max_row=2, values_only=True))[0] # Zeige Spalten 1-30 print("\nSpaltenübersicht:") for i in range(30): val1 = row1[i] if i < len(row1) and row1[i] else "" val2 = row2[i] if i < len(row2) and row2[i] else "" if val1 or val2: print(f" Spalte {i+1:2}: '{val1}' | '{val2}'") # Suche nach Kreditnamen in Zeile 1 kredit_positionen = [] for col_idx, cell in enumerate(row1, 1): if cell and isinstance(cell, str) and cell.strip(): name = cell.strip() if name not in ['', 'Monat']: kredit_positionen.append({ 'name': name, 'spalte': col_idx, 'header': row2[col_idx-1] if col_idx-1 < len(row2) else None }) print(f"\n=== Gefundene Kredite: {len(kredit_positionen)} ===") for kp in kredit_positionen: print(f" {kp['name']} bei Spalte {kp['spalte']}, Header: {kp['header']}") # Für jeden Kredit: Finde Restschuld, Tilgung, Zinsen Spalten print("\n=== DETAILLIERTE ANALYSE ===") for kp in kredit_positionen: name = kp['name'] start_col = kp['spalte'] # Die nächsten 3 Spalten prüfen headers = [] for i in range(start_col-1, min(start_col+2, len(row2))): headers.append((i+1, row2[i])) print(f"\n{name} (Start bei Spalte {start_col}):") print(f" Headers: {headers}") # Finde die relevanten Spalten restschuld_col = None tilgung_col = None zinsen_col = None for col_num, header in headers: if header == "Restschuld": restschuld_col = col_num elif header == "Tilgung": tilgung_col = col_num elif header == "Zinsen": zinsen_col = col_num print(f" Restschuld: Spalte {restschuld_col}") print(f" Tilgung: Spalte {tilgung_col}") print(f" Zinsen: Spalte {zinsen_col}") if not restschuld_col: print(f" [Überspringe - keine Restschuld-Spalte]") continue # Suche die letzte Zeile mit Daten letzte_restschuld = None letztes_datum = None erster_wert = None erster_wert_datum = None monatsrate = None start_datum = None for row_idx in range(3, min(ws.max_row + 1, 400)): datum_cell = ws.cell(row=row_idx, column=1).value rest_cell = ws.cell(row=row_idx, column=restschuld_col).value tilg_cell = ws.cell(row=row_idx, column=tilgung_col).value if tilgung_col else None # Konvertiere zu Zahl wenn möglich if rest_cell is not None: try: rest_val = float(rest_cell) except: continue else: continue # Startdatum = erstes Datum mit Restschuld if start_datum is None and datum_cell and isinstance(datum_cell, datetime): start_datum = datum_cell erster_wert = rest_val erster_wert_datum = datum_cell # Monatsrate aus konstanter Tilgung if tilg_cell and isinstance(tilg_cell, (int, float)): if tilg_cell > 0: if monatsrate is None: monatsrate = tilg_cell # Letzter Wert letzte_restschuld = rest_val if datum_cell and isinstance(datum_cell, datetime): letztes_datum = datum_cell # Status ermitteln if letzte_restschuld is not None: status = "ABGEZAHLT" if letzte_restschuld < 10 else "AKTIV" print(f" Erster Wert: {erster_wert:,.2f} EUR am {erster_wert_datum.strftime('%d.%m.%Y') if erster_wert_datum else 'N/A'}") print(f" Letzte Restschuld: {letzte_restschuld:,.2f} EUR") print(f" Letztes Datum: {letztes_datum.strftime('%d.%m.%Y') if letztes_datum else 'N/A'}") print(f" Monatsrate: {monatsrate:,.2f} EUR" if monatsrate else " Monatsrate: N/A") print(f" STATUS: {status}") else: print(f" [Keine Daten gefunden]")