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

97 lines
3.9 KiB
Python

import openpyxl
import sys
from datetime import datetime
import re
import json
# Excel-Datei laden
datei = "Kopie von Kostenrechnung der Nächsten jahre (3).xlsx"
print(f"Lade {datei}...")
try:
wb = openpyxl.load_workbook(datei, data_only=True)
print("\n=== Verfügbare Sheets ===")
for name in wb.sheetnames:
print(f" - {name}")
# Das Sheet "Tilgung bei Gleichbleibenden Be" laden
sheet_name = "Tilgung bei Gleichbleibenden Be"
if sheet_name in wb.sheetnames:
ws = wb[sheet_name]
print(f"\n=== Analyse: {sheet_name} ===")
print(f"Bereich: {ws.dimensions}")
print(f"Max Zeile: {ws.max_row}, Max Spalte: {ws.max_column}")
else:
print(f"Sheet '{sheet_name}' nicht gefunden!")
print("Verfügbare Sheets:", wb.sheetnames)
sys.exit(1)
# Ersten 50 Zeilen anzeigen um Struktur zu verstehen
print("\n=== Erste 30 Zeilen (für Struktur) ===")
for row_idx, row in enumerate(ws.iter_rows(min_row=1, max_row=30, values_only=True), 1):
non_empty = [str(cell)[:30] if cell is not None else "" for cell in row[:10]]
if any(non_empty):
print(f"Zeile {row_idx:2}: {non_empty}")
# Nach Kreditnamen suchen - wir wissen die Kreditnamen
kredit_namen = ["Targo Bank", "Köpke", "DSL Bank", "PSD Nord", "Zingelstr. 14",
"Sparkasse", "Carola", "Kerstin", "PVCreditplus"]
print("\n=== Suche nach Krediten ===")
kredite_gefunden = {}
for row_idx, row in enumerate(ws.iter_rows(min_row=1, max_row=ws.max_row, values_only=True), 1):
for cell in row:
if cell and isinstance(cell, str):
for kredit_name in kredit_namen:
if kredit_name.lower() in cell.lower():
# Zeile extrahieren
row_data = list(row)
print(f"\n🔍 Gefunden: '{kredit_name}' in Zeile {row_idx}")
print(f" Zeile {row_idx}: {row_data[:15]}")
kredite_gefunden[kredit_name] = {
"zeile": row_idx,
"daten": row_data
}
break
# Nun detaillierte Analyse für jeden gefundenen Kredit
print("\n\n" + "="*80)
print("DETAILLIERTE KREDIT-ANALYSE")
print("="*80)
# Wir müssen die Struktur verstehen - oft sind Kredite untereinander
# mit Header-Zeilen dazwischen
# Alternative: Suche nach Mustern wie "Restschuld", "Monatsrate", etc.
print("\n=== Suche nach Schlüsselwörtern ===")
keywords = ["restschuld", "monatsrate", "rate", "zinssatz", "zins", "laufzeit", "betrag", "start"]
for row_idx, row in enumerate(ws.iter_rows(min_row=1, max_row=100, values_only=True), 1):
for cell in row:
if cell and isinstance(cell, str):
cell_lower = cell.lower()
for kw in keywords:
if kw in cell_lower:
row_data = [str(c)[:25] if c is not None else "" for c in row[:12]]
print(f"Zeile {row_idx:3} [{kw:12}]: {row_data}")
break
# Versuche konkrete Werte zu finden
print("\n=== Suche nach konkreten Werten (Zahlen > 1000) ===")
for row_idx, row in enumerate(ws.iter_rows(min_row=1, max_row=200, values_only=True), 1):
numbers = []
for col_idx, cell in enumerate(row[:20], 1):
if isinstance(cell, (int, float)) and cell > 1000:
numbers.append(f"Col{col_idx}:{cell}")
if numbers:
# Zeile auch mit Text anzeigen
texts = [str(c)[:20] for c in row[:5] if c and isinstance(c, str)]
print(f"Zeile {row_idx:3}: {texts} | Zahlen: {numbers[:5]}")
except Exception as e:
print(f"Fehler: {e}")
import traceback
traceback.print_exc()