97 lines
3.9 KiB
Python
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()
|