#!/usr/bin/env python3 """ Analysiert das 'Tilgung bei Gleichbleibenden Be' Sheet genauer. Sucht nach den Raten: 513,80 / 237,35 / 350 / 1666.53 """ import openpyxl from datetime import datetime datei = "Kopie von Kostenrechnung der Nächsten jahre (3).xlsx" wb = openpyxl.load_workbook(datei, data_only=True) sheet_name = "Tilgung bei Gleichbleibenden Be" ws = wb[sheet_name] print(f"=== SHEET: {sheet_name} ===") print(f"Max Zeile: {ws.max_row}, Max Spalte: {ws.max_column}") # Header (Zeile 1-5) print("\n=== ZEILE 1-5 (HEADER) ===") for row_idx in range(1, 6): row_data = [] for col_idx in range(1, 30): cell = ws.cell(row=row_idx, column=col_idx) val = cell.value if val: if isinstance(val, str): row_data.append(f"S{col_idx}:{val[:15]}") elif isinstance(val, (int, float)): row_data.append(f"S{col_idx}:{val:,.2f}") elif isinstance(val, datetime): row_data.append(f"S{col_idx}:{val.strftime('%Y-%m')}") if row_data: print(f"Zeile {row_idx}: {row_data}") # Suche nach den Raten print("\n=== SUCHE NACH RATEN (513.80, 237.35, 350, 1666.53) ===") target_rates = [513.80, 237.35, 350, 1666.53, 427] for target in target_rates: print(f"\nSuche nach Rate {target}:") found = False for row_idx in range(1, min(ws.max_row + 1, 200)): for col_idx in range(1, min(ws.max_column + 1, 50)): val = ws.cell(row=row_idx, column=col_idx).value if val and isinstance(val, (int, float)): if abs(val - target) < 1: # Toleranz 1 EUR bank = ws.cell(row=1, column=col_idx).value label = ws.cell(row=2, column=col_idx).value print(f" GEFUNDEN: Zeile {row_idx}, Spalte {col_idx}: {val}") print(f" Bank: {bank}, Label: {label}") # Zeige Kontext context = [] for c in range(col_idx-2, col_idx+3): if c > 0: v = ws.cell(row=row_idx, column=c).value context.append(f"S{c}:{str(v)[:10] if v else '-'}") print(f" Kontext: {context}") found = True if not found: print(f" NICHT GEFUNDEN") # Lese aktuelle Werte aus den letzten Zeilen print("\n=== LETZTE ZEILEN MIT DATEN (für aktuelle Restschulden) ===") # Finde die letzte Zeile mit Datum last_date_row = None for row in range(ws.max_row, 5, -1): val = ws.cell(row=row, column=1).value if val and isinstance(val, datetime): last_date_row = row break print(f"Letzte Zeile mit Datum: {last_date_row} ({ws.cell(row=last_date_row, column=1).value})") if last_date_row: # Lese alle Werte aus der letzten Zeile print(f"\nWerte in Zeile {last_date_row}:") for col_idx in range(1, min(ws.max_column + 1, 30)): val = ws.cell(row=last_date_row, column=col_idx).value if val and isinstance(val, (int, float)) and val > 100: bank = ws.cell(row=1, column=col_idx).value label = ws.cell(row=2, column=col_idx).value print(f" Spalte {col_idx}: {val:,>12,.2f} - Bank: {bank}, Label: {label}") # Zeige auch Zeile 1 Headers print("\n=== BANKNAMEN IN ZEILE 1 ===") for col_idx in range(1, 30): val = ws.cell(row=1, column=col_idx).value if val: print(f" Spalte {col_idx:2}: {val}")