From c471b4818636bdd3a21f2696036bc634338e9d5b Mon Sep 17 00:00:00 2001 From: Floke Date: Fri, 18 Jul 2025 12:25:01 +0000 Subject: [PATCH] google_sheet_handler.py aktualisiert --- google_sheet_handler.py | 52 +++++++++++++++++++++++++++-------------- 1 file changed, 34 insertions(+), 18 deletions(-) diff --git a/google_sheet_handler.py b/google_sheet_handler.py index 280c131f..93d0dfe1 100644 --- a/google_sheet_handler.py +++ b/google_sheet_handler.py @@ -73,42 +73,58 @@ class GoogleSheetHandler: @retry_on_failure 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: self.logger.error("Fehler: Keine Sheet-Verbindung zum Laden der Daten.") - self.sheet_values = [] + self._all_data = [] return False self.logger.info("Lade Daten aus Google Sheet...") 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.headers = [] - return True + return True # Kein Fehler, nur keine Daten - num_rows = len(self.sheet_values) - num_cols = len(self.sheet_values[0]) if num_rows > 0 else 0 + num_rows = len(self._all_data) + 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.") try: - max_col_idx_in_map = max(COLUMN_MAP.values()) - if num_cols <= max_col_idx_in_map: + # KORREKTUR: Extrahiere die 'index'-Werte und finde das Maximum davon. + all_indices = [v['index'] for v in COLUMN_MAP.values()] + if not all_indices: + raise ValueError("COLUMN_MAP enthält keine Indizes.") + + max_col_idx_in_map = max(all_indices) + + # Die Anzahl der Spalten im Sheet muss mindestens so groß sein wie der höchste Index + 1 + expected_min_cols = max_col_idx_in_map + 1 + if num_cols < expected_min_cols: self.logger.warning( - f"Geladenes Sheet hat {num_cols} Spalten, erwartet werden aber mindestens " - f"{max_col_idx_in_map + 1} basierend auf COLUMN_MAP." + 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: - self.logger.warning("COLUMN_MAP scheint leer zu sein. Kann Spaltenanzahl nicht pruefen.") + 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"Fehler bei der Pruefung der Spaltenanzahl gegen COLUMN_MAP: {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 except Exception as e: