google_sheet_handler.py aktualisiert
This commit is contained in:
@@ -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 ---
|
||||
Reference in New Issue
Block a user