Initial commit - Stand 26.04.2026
This commit is contained in:
@@ -0,0 +1,127 @@
|
||||
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]")
|
||||
Reference in New Issue
Block a user