Files
buchhaltung/analyze_tilgung_sheet.py
2026-04-26 07:51:39 +02:00

92 lines
3.4 KiB
Python

#!/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}")