diff --git a/sync_manager.py b/sync_manager.py index 6d1dbf48..91960d3f 100644 --- a/sync_manager.py +++ b/sync_manager.py @@ -101,23 +101,29 @@ class SyncManager: self.logger.info("Lade bestehende Daten aus dem Google Sheet...") try: all_data_with_headers = self.sheet_handler.get_all_data_with_headers() - if not all_data_with_headers or len(all_data_with_headers) < self.sheet_handler._header_rows: - self.gsheet_df = pd.DataFrame(columns=COLUMN_ORDER).fillna('') + self.gsheet_df = pd.DataFrame(columns=COLUMN_ORDER) else: actual_header = all_data_with_headers[self.sheet_handler._header_rows - 1] - data_rows_raw = all_data_with_headers[self.sheet_handler._header_rows:] + data_rows = all_data_with_headers[self.sheet_handler._header_rows:] - # --- HOLZHAMMER-METHODE: JEDE ZELLE ZU STRING KONVERTIEREN --- - data_rows_as_string = [[str(cell) for cell in row] for row in data_rows_raw] - - temp_df = pd.DataFrame(data_rows_as_string, columns=actual_header) + # --- FINALER DATAFRAME-ERSTELLUNGS-FIX --- + # Wir erstellen das DataFrame aus einem Dictionary, das ist am robustesten. + data_dict = {header_col: [] for header_col in actual_header} + for row in data_rows: + for i, header_col in enumerate(actual_header): + # Fülle fehlende Werte auf, wenn eine Zeile zu kurz ist + value = row[i] if i < len(row) else '' + data_dict[header_col].append(str(value)) # Sofort zu String konvertieren + + temp_df = pd.DataFrame(data_dict) for col_name in COLUMN_ORDER: if col_name not in temp_df.columns: temp_df[col_name] = '' - self.gsheet_df = temp_df[COLUMN_ORDER].fillna('') + self.gsheet_df = temp_df[COLUMN_ORDER] + except Exception as e: self.logger.critical(f"Fehler beim Laden/Umwandeln der GSheet-Daten: {e}", exc_info=True) return False