92 lines
3.4 KiB
Python
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}")
|