From b36b46c6917fddcdf054fb10a771ff4b8885f1b4 Mon Sep 17 00:00:00 2001 From: Floke Date: Sun, 20 Jul 2025 05:07:03 +0000 Subject: [PATCH] google_sheet_handler.py aktualisiert --- google_sheet_handler.py | 46 ++++++++++++++++++++++++++++++----------- 1 file changed, 34 insertions(+), 12 deletions(-) diff --git a/google_sheet_handler.py b/google_sheet_handler.py index 61ade005..f581b598 100644 --- a/google_sheet_handler.py +++ b/google_sheet_handler.py @@ -220,26 +220,48 @@ class GoogleSheetHandler: def batch_update_cells(self, update_data): """ Fuehrt ein Batch-Update im Google Sheet durch. - - Args: - update_data (list): Eine Liste von Dictionaries, jedes mit 'range' (str) - und 'values' (list of lists). - Returns: - bool: True bei Erfolg, False bei endgueltigem Fehler. + NEU: Konvertiert alle zu schreibenden Werte explizit in Strings, um Fehler zu vermeiden. """ if not self.sheet: self.logger.error("FEHLER: Keine Sheet-Verbindung fuer Batch-Update.") return False if not update_data: + self.logger.debug("batch_update_cells: Keine Daten zum Aktualisieren erhalten.") return True - try: - total_cells_to_update = sum(len(row) for item in update_data for row in item.get('values', [])) - self.logger.debug(f" -> Versuche sheet.batch_update mit {len(update_data)} Anfragen ({total_cells_to_update} Zellen)...") - self.sheet.batch_update(update_data, value_input_option='USER_ENTERED') + # --- NEUE, ROBUSTE DATENAUFBEREITUNG --- + sanitized_update_data = [] + for item in update_data: + if 'range' in item and 'values' in item and isinstance(item['values'], list): + # Konvertiere jeden einzelnen Zellwert im values-Array sicher in einen String + sanitized_values = [ + [str(cell_value) if cell_value is not None else "" for cell_value in row] + for row in item['values'] + ] + sanitized_update_data.append({ + 'range': item['range'], + 'values': sanitized_values + }) + else: + self.logger.warning(f"Überspringe ungültiges Update-Objekt: {item}") + + if not sanitized_update_data: + self.logger.warning("Keine gültigen Daten nach der Bereinigung für das Batch-Update übrig.") return True - except Exception: - self.logger.error(f"Endgueltiger Fehler beim Batch-Update nach Retries. Kann {len(update_data)} Operationen nicht durchfuehren.") + + try: + total_cells_to_update = sum(len(row) for item in sanitized_update_data for row in item.get('values', [])) + self.logger.debug(f" -> Versuche sheet.batch_update mit {len(sanitized_update_data)} Anfragen ({total_cells_to_update} Zellen)...") + + # Logge das erste Datenobjekt zur Überprüfung + if self.logger.level == logging.DEBUG and sanitized_update_data: + self.logger.debug(f" -> Beispiel-Update-Daten: {str(sanitized_update_data[0])}") + + self.sheet.batch_update(sanitized_update_data, value_input_option='USER_ENTERED') + self.logger.info(f"Batch-Update mit {total_cells_to_update} Zellen erfolgreich gesendet.") + return True + except Exception as e: + self.logger.error(f"Endgueltiger Fehler beim Batch-Update nach Retries: {e}", exc_info=True) return False # --- END OF FILE google_sheet_handler.py --- \ No newline at end of file