sync_manager.py aktualisiert

This commit is contained in:
2025-08-28 17:57:44 +00:00
parent 1068243ca9
commit e71c11c432

View File

@@ -86,11 +86,11 @@ class SyncManager:
"""Lädt und bereitet die Daten aus D365 und Google Sheets vor."""
self.logger.info(f"Lade Daten aus D365-Export: '{self.d365_export_path}'...")
try:
self.d365_df = pd.read_excel(self.d365_export_path, dtype=str).fillna('')
temp_d365_df = pd.read_excel(self.d365_export_path, dtype=str).fillna('')
for d365_col in self.d365_to_gsheet_map.keys():
if d365_col not in self.d365_df.columns:
if d365_col not in temp_d365_df.columns:
raise ValueError(f"Erwartete Spalte '{d365_col}' nicht in der D365-Exportdatei gefunden.")
self.d365_df = self.d365_df[list(self.d365_to_gsheet_map.keys())].copy()
self.d365_df = temp_d365_df[list(self.d365_to_gsheet_map.keys())].copy()
self.d365_df.rename(columns=self.d365_to_gsheet_map, inplace=True)
self.d365_df['CRM ID'] = self.d365_df['CRM ID'].str.strip().str.lower()
self.d365_df = self.d365_df[self.d365_df['CRM ID'].str.match(r'^[0-9a-f]{8}-([0-9a-f]{4}-){3}[0-9a-f]{12}$', na=False)]
@@ -103,25 +103,21 @@ class SyncManager:
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)
self.gsheet_df = pd.DataFrame(columns=COLUMN_ORDER).fillna('')
else:
actual_header = all_data_with_headers[self.sheet_handler._header_rows - 1]
data_rows = all_data_with_headers[self.sheet_handler._header_rows:]
data_rows_raw = all_data_with_headers[self.sheet_handler._header_rows:]
# --- FINALER DATAFRAME-ERSTELLUNGS-FIX ---
temp_df = pd.DataFrame(data_rows, columns=actual_header)
# --- 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)
# Sorge dafür, dass alle Spalten aus unserer Config existieren
for col_name in COLUMN_ORDER:
if col_name not in temp_df.columns:
temp_df[col_name] = ''
# Wähle nur die Spalten aus, die wir wollen, in der korrekten Reihenfolge
temp_df = temp_df[COLUMN_ORDER]
# Konvertiere ALLES im DataFrame präventiv zu Strings und fülle leere Zellen
self.gsheet_df = temp_df.astype(str).fillna('')
self.gsheet_df = temp_df[COLUMN_ORDER].fillna('')
except Exception as e:
self.logger.critical(f"Fehler beim Laden/Umwandeln der GSheet-Daten: {e}", exc_info=True)
return False