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

136 lines
4.5 KiB
Python

#!/usr/bin/env python3
"""
Liest Kreditdaten aus der Excel-Datei - Verbesserte Version.
"""
import openpyxl
import json
from datetime import datetime
# Excel-Datei laden
datei = "Kopie von Kostenrechnung der Nächsten jahre (3).xlsx"
print(f"Lade {datei}...")
wb = openpyxl.load_workbook(datei, data_only=True)
# Sheet "Tilgung bei Gleichbleibenden Be" laden
sheet_name = "Tilgung bei Gleichbleibenden Be"
ws = wb[sheet_name]
print(f"\n=== Sheet: {sheet_name} ===")
print(f"Max Zeile: {ws.max_row}, Max Spalte: {ws.max_column}")
# Zeile 1: Header mit Banknamen
print("\n=== ZEILE 1: BANKNAMEN ===")
banken = []
for col_idx in range(1, 25):
cell = ws.cell(row=1, column=col_idx)
val = cell.value
if val:
banken.append((col_idx, val))
print(f"Spalte {col_idx}: {val}")
# Zeile 2: Labels (Restschuld, Tilgung, Zinsen, etc.)
print("\n=== ZEILE 2: LABELS ===")
labels = []
for col_idx in range(1, 25):
cell = ws.cell(row=2, column=col_idx)
val = cell.value
if val:
labels.append((col_idx, val))
print(f"Spalte {col_idx}: {val}")
# Zeile 3-5: Mögliche Zinssätze oder weitere Metadaten
print("\n=== ZEILEN 3-5: WEITERE METADATEN ===")
for row_idx in range(3, 6):
row_data = []
for col_idx in range(1, 25):
cell = ws.cell(row=row_idx, column=col_idx)
val = cell.value
if val:
if isinstance(val, str):
row_data.append((col_idx, val[:30]))
else:
row_data.append((col_idx, val))
if row_data:
print(f"Zeile {row_idx}: {row_data[:10]}")
# Zeile 6: Sollte das Datum sein
print("\n=== ZEILE 6: ERSTE DATENZEILE (Datum?) ===")
for col_idx in range(1, 10):
cell = ws.cell(row=6, column=col_idx)
val = cell.value
if val:
print(f"Spalte {col_idx}: {val} (Typ: {type(val).__name__})")
# Jetzt die Daten für jeden Kredit
print("\n=== DATENEXTRAKTION FUER 5 KREDITE ===")
# Kredit-Mapping basierend auf Zeile 1
# Zeile 1 zeigt: Spalte 1=Targo Bank, Spalte 5=Kopke, Spalte 9=DSL Bank, Spalte 13=PSD Nord
# Jeder Kredit hat 4 Spalten: Restschuld, Tilgung, Zinsen, (Reserve/Monat)
kredite = [
("DSL Bank", 9), # Spalte 9 = DSL Bank (basierend auf Zeile 1)
("PSD Nord", 13), # Spalte 13 = PSD Nord
("Zingelstr. 14 DSL", None), # Muss gesucht werden
("Zingelstr. 14 Sparkasse", None),
("PVCreditplus", None)
]
# Zeile 1 - alle Werte lesen
row1_values = []
for col_idx in range(1, 45):
cell = ws.cell(row=1, column=col_idx)
val = cell.value
if val:
row1_values.append((col_idx, str(val)))
print("\nAlle Werte in Zeile 1:")
for col, val in row1_values:
print(f" Spalte {col}: {val}")
# Zeile 2 - alle Werte lesen (Labels)
print("\nAlle Werte in Zeile 2 (Labels):")
row2_values = []
for col_idx in range(1, 45):
cell = ws.cell(row=2, column=col_idx)
val = cell.value
if val:
row2_values.append((col_idx, str(val)))
for col, val in row2_values[:15]:
print(f" Spalte {col}: {val}")
# Suche nach Zinssätzen
print("\n=== SUCHE NACH ZINSSÄTZEN (Werte < 1 oder mit %) ===")
for row_idx in range(1, 10):
for col_idx in range(1, 45):
cell = ws.cell(row=row_idx, column=col_idx)
val = cell.value
if val and isinstance(val, (int, float)):
if 0.001 < val < 0.2: # Als Dezimal (0.02 = 2%)
label = ws.cell(row=row_idx-1, column=col_idx).value if row_idx > 1 else None
bank = ws.cell(row=1, column=col_idx).value
print(f"Zeile {row_idx}, Spalte {col_idx}: {val} ({val*100:.2f}%) - Bank: {bank}, Label: {label}")
elif 1 < val < 20: # Als Prozent direkt
label = ws.cell(row=row_idx-1, column=col_idx).value if row_idx > 1 else None
bank = ws.cell(row=1, column=col_idx).value
print(f"Zeile {row_idx}, Spalte {col_idx}: {val}% - Bank: {bank}, Label: {label}")
# Suche nach Zinssatz im Text
print("\n=== SUCHE NACH 'ZINS' IM TEXT ===")
for row_idx in range(1, 15):
for col_idx in range(1, 45):
cell = ws.cell(row=row_idx, column=col_idx)
val = cell.value
if val and isinstance(val, str) and "zins" in val.lower():
print(f"Zeile {row_idx}, Spalte {col_idx}: '{val}'")
# Zeige Umgebung
for r in range(row_idx, row_idx+2):
vals = []
for c in range(col_idx, col_idx+5):
v = ws.cell(row=r, column=c).value
vals.append(str(v) if v else "-")
print(f" Row {r}: {vals}")