google_sheet_handler.py aktualisiert

This commit is contained in:
2025-07-18 12:25:01 +00:00
parent a98eda1414
commit 6cde8d0254

View File

@@ -73,42 +73,58 @@ class GoogleSheetHandler:
@retry_on_failure @retry_on_failure
def load_data(self): def load_data(self):
""" """
Laedt alle Daten aus dem Sheet und aktualisiert self.sheet_values. Laedt alle Daten aus dem Sheet und aktualisiert die internen Datenstrukturen.
Führt eine Validierung der Spaltenanzahl durch.
""" """
if not self.sheet: if not self.sheet:
self.logger.error("Fehler: Keine Sheet-Verbindung zum Laden der Daten.") self.logger.error("Fehler: Keine Sheet-Verbindung zum Laden der Daten.")
self.sheet_values = [] self._all_data = []
return False return False
self.logger.info("Lade Daten aus Google Sheet...") self.logger.info("Lade Daten aus Google Sheet...")
try: try:
self.sheet_values = self.sheet.get_all_values() self._all_data = self.sheet.get_all_values()
if not self.sheet_values: if not self._all_data:
self.logger.warning("Google Sheet scheint leer zu sein oder get_all_values() lieferte keine Daten.") self.logger.warning("Google Sheet scheint leer zu sein oder get_all_values() lieferte keine Daten.")
self.headers = [] self.headers = []
return True return True # Kein Fehler, nur keine Daten
num_rows = len(self.sheet_values) num_rows = len(self._all_data)
num_cols = len(self.sheet_values[0]) if num_rows > 0 else 0 num_cols = len(self._all_data[0]) if num_rows > 0 else 0
self.logger.info(f"Daten neu geladen: {num_rows} Zeilen, {num_cols} Spalten.") self.logger.info(f"Daten neu geladen: {num_rows} Zeilen, {num_cols} Spalten.")
try: try:
max_col_idx_in_map = max(COLUMN_MAP.values()) # KORREKTUR: Extrahiere die 'index'-Werte und finde das Maximum davon.
if num_cols <= max_col_idx_in_map: all_indices = [v['index'] for v in COLUMN_MAP.values()]
self.logger.warning( if not all_indices:
f"Geladenes Sheet hat {num_cols} Spalten, erwartet werden aber mindestens " raise ValueError("COLUMN_MAP enthält keine Indizes.")
f"{max_col_idx_in_map + 1} basierend auf COLUMN_MAP."
) max_col_idx_in_map = max(all_indices)
except ValueError:
self.logger.warning("COLUMN_MAP scheint leer zu sein. Kann Spaltenanzahl nicht pruefen.") # Die Anzahl der Spalten im Sheet muss mindestens so groß sein wie der höchste Index + 1
except Exception as e: expected_min_cols = max_col_idx_in_map + 1
self.logger.error(f"Fehler bei der Pruefung der Spaltenanzahl gegen COLUMN_MAP: {e}") if num_cols < expected_min_cols:
self.logger.warning(
f"Geladenes Sheet hat nur {num_cols} Spalten, aber COLUMN_MAP definiert Spalten bis Index "
f"{max_col_idx_in_map} (erwartet mind. {expected_min_cols} Spalten)."
)
except (ValueError, KeyError) as e:
self.logger.warning(f"COLUMN_MAP scheint leer oder fehlerhaft zu sein. Kann Spaltenanzahl nicht pruefen. Fehler: {e}")
except Exception as e:
self.logger.error(f"Unerwarteter Fehler bei der Pruefung der Spaltenanzahl gegen COLUMN_MAP: {e}")
# Finde die Header-Zeilen (Annahme: die erste Zeile mit "CRM Name" drin)
self._header_rows = 5 # Standardwert
for i, row in enumerate(self._all_data):
if "CRM Name" in row:
# Wir nehmen an, dass die Zeile VOR den Headern die Spaltenbuchstaben enthält
self._header_rows = i
self.headers = self._all_data[self._header_rows]
break
else: # Falls "CRM Name" nicht gefunden wird
self.headers = self._all_data[0] if self._all_data else []
if num_rows > 0:
self.headers = self.sheet_values[0]
else:
self.headers = []
return True return True
except Exception as e: except Exception as e: