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