bugfix
This commit is contained in:
@@ -41,50 +41,96 @@ def get_services_with_service_account():
|
||||
except Exception as e: print(f"Fehler Drive Service: {e}")
|
||||
return docs_service, drive_service
|
||||
|
||||
Info: Ordner-ID für Dokument: '18DNQaH9zbcBzwhckJI-4Uah-WXTXg6bg'
|
||||
Docs API Service erstellt.
|
||||
Drive API Service erstellt.
|
||||
Neues leeres Doc via Drive API in Ordner '18DNQaH9zbcBzwhckJI-4Uah-WXTXg6bg' erstellt, ID: 190HPlsHFI-QcwVoKav6BUcgy3WOeg4Kp9WkFik1El5I
|
||||
Einmalige Info eingefügt.
|
||||
Versuche Tabelle für Gruppe 'Bienen' mit gdoctableapp einzufügen...
|
||||
Fehler bei Tabelle/Footer für Gruppe 'Bienen': 'gdoctableapp' object has no attribute 'add_table'
|
||||
Fehler beim Einfügen des PageBreak nach Bienen: 'gdoctableapp' object has no attribute 'add_page_break'
|
||||
Versuche Tabelle für Gruppe 'Eulen' mit gdoctableapp einzufügen...
|
||||
Fehler bei Tabelle/Footer für Gruppe 'Eulen': 'gdoctableapp' object has no attribute 'add_table'
|
||||
Fehler beim Einfügen des PageBreak nach Eulen: 'gdoctableapp' object has no attribute 'add_page_break'
|
||||
Versuche Tabelle für Gruppe 'Frösche' mit gdoctableapp einzufügen...
|
||||
Fehler bei Tabelle/Footer für Gruppe 'Frösche': 'gdoctableapp' object has no attribute 'add_table'
|
||||
Fehler beim Einfügen des PageBreak nach Frösche: 'gdoctableapp' object has no attribute 'add_page_break'
|
||||
Versuche Tabelle für Gruppe 'Hasen' mit gdoctableapp einzufügen...
|
||||
Fehler bei Tabelle/Footer für Gruppe 'Hasen': 'gdoctableapp' object has no attribute 'add_table'
|
||||
Fehler beim Einfügen des PageBreak nach Hasen: 'gdoctableapp' object has no attribute 'add_page_break'
|
||||
Versuche Tabelle für Gruppe 'Kobolde' mit gdoctableapp einzufügen...
|
||||
Fehler bei Tabelle/Footer für Gruppe 'Kobolde': 'gdoctableapp' object has no attribute 'add_table'
|
||||
Fehler beim Einfügen des PageBreak nach Kobolde: 'gdoctableapp' object has no attribute 'add_page_break'
|
||||
Versuche Tabelle für Gruppe 'Marienkäfer' mit gdoctableapp einzufügen...
|
||||
Fehler bei Tabelle/Footer für Gruppe 'Marienkäfer': 'gdoctableapp' object has no attribute 'add_table'
|
||||
Fehler beim Einfügen des PageBreak nach Marienkäfer: 'gdoctableapp' object has no attribute 'add_page_break'
|
||||
Versuche Tabelle für Gruppe 'Maulwürfe' mit gdoctableapp einzufügen...
|
||||
Fehler bei Tabelle/Footer für Gruppe 'Maulwürfe': 'gdoctableapp' object has no attribute 'add_table'
|
||||
Fehler beim Einfügen des PageBreak nach Maulwürfe: 'gdoctableapp' object has no attribute 'add_page_break'
|
||||
Versuche Tabelle für Gruppe 'Schmetterlinge' mit gdoctableapp einzufügen...
|
||||
Fehler bei Tabelle/Footer für Gruppe 'Schmetterlinge': 'gdoctableapp' object has no attribute 'add_table'
|
||||
Fehler beim Einfügen des PageBreak nach Schmetterlinge: 'gdoctableapp' object has no attribute 'add_page_break'
|
||||
Versuche Tabelle für Gruppe 'Wichtel' mit gdoctableapp einzufügen...
|
||||
Fehler bei Tabelle/Footer für Gruppe 'Wichtel': 'gdoctableapp' object has no attribute 'add_table'
|
||||
Fehler beim Einfügen des PageBreak nach Wichtel: 'gdoctableapp' object has no attribute 'add_page_break'
|
||||
Versuche Tabelle für Gruppe 'Wölfe' mit gdoctableapp einzufügen...
|
||||
Fehler bei Tabelle/Footer für Gruppe 'Wölfe': 'gdoctableapp' object has no attribute 'add_table'
|
||||
Fehler beim Einfügen des PageBreak nach Wölfe: 'gdoctableapp' object has no attribute 'add_page_break'
|
||||
Versuche Tabelle für Gruppe 'Zwergerl' mit gdoctableapp einzufügen...
|
||||
Fehler bei Tabelle/Footer für Gruppe 'Zwergerl': 'gdoctableapp' object has no attribute 'add_table'
|
||||
Sende zusätzliche Fallback-Requests für Doc ID '190HPlsHFI-QcwVoKav6BUcgy3WOeg4Kp9WkFik1El5I'...
|
||||
def generate_tables_with_gdoctableapp(docs_api_service, document_id_to_fill):
|
||||
# ... (CSV-Lesen, sorted_gruppen_namen, stand_zeit bleiben gleich) ...
|
||||
kinder_nach_gruppen = collections.defaultdict(list) # Muss hier definiert werden
|
||||
try:
|
||||
with open(CSV_FILENAME, mode='r', encoding='utf-8-sig', newline='') as csvfile:
|
||||
reader = csv.DictReader(csvfile, delimiter=';')
|
||||
for row in reader:
|
||||
vorname = row.get('Vorname','').strip(); nachname = row.get('Nachname','').strip(); gruppe_original = row.get('Gruppe','').strip()
|
||||
if not vorname or not nachname or not gruppe_original: continue
|
||||
kinder_nach_gruppen[gruppe_original].append({'Nachname': nachname, 'Vorname': vorname})
|
||||
except Exception as e: print(f"FEHLER CSV-Lesen: {e}"); return False
|
||||
if not kinder_nach_gruppen: print("Keine CSV-Daten."); return False
|
||||
for gk_key in kinder_nach_gruppen:
|
||||
kinder_nach_gruppen[gk_key].sort(key=lambda x: (x['Nachname'].lower(), x['Vorname'].lower()))
|
||||
sorted_gruppen_namen = sorted(kinder_nach_gruppen.keys())
|
||||
stand_zeit = datetime.now().strftime("%d.%m.%Y %H:%M Uhr")
|
||||
|
||||
--- SKRIPT BEENDET ---
|
||||
Dokument-ID: 190HPlsHFI-QcwVoKav6BUcgy3WOeg4Kp9WkFik1El5I
|
||||
Link: https://docs.google.com/document/d/190HPlsHFI-QcwVoKav6BUcgy3WOeg4Kp9WkFik1El5I/edit
|
||||
HINWEIS: Es wurde versucht, echte Tabellen mit fetter Kopfzeile via gdoctableapppy zu erstellen.
|
||||
root@Diskstation2:/volume1/homes/Floke/python/brancheneinstufung#
|
||||
try:
|
||||
resource_for_lib = {"docsService": docs_api_service, "documentId": document_id_to_fill}
|
||||
gtable_manager = gdoctableapp(resource_for_lib)
|
||||
except Exception as e_dta_init:
|
||||
print(f"Fehler bei der Initialisierung von gdoctableapp: {e_dta_init}"); return False
|
||||
|
||||
additional_requests_fallback = []
|
||||
|
||||
for i, gruppe_original in enumerate(sorted_gruppen_namen):
|
||||
kinder_liste = kinder_nach_gruppen[gruppe_original]
|
||||
anzahl_kinder = len(kinder_liste)
|
||||
gruppe_display_name = gruppe_original + GRUPPENNAME_SUFFIX
|
||||
|
||||
table_values = []
|
||||
table_values.append(["Nachname", "Vorname", "Gruppe"])
|
||||
for kind in kinder_liste:
|
||||
table_values.append([kind['Nachname'], kind['Vorname'], gruppe_display_name])
|
||||
|
||||
try:
|
||||
print(f"Versuche Tabelle für Gruppe '{gruppe_original}' mit gdoctableapp einzufügen...")
|
||||
# KORREKTER METHODENNAME: create_table
|
||||
res_table_obj = gtable_manager.create_table(values=table_values, index=None)
|
||||
|
||||
# Die Doku für create_table sagt:
|
||||
# "When this is used, the table is created to the last of body. And, this method returns the object including the created table object and the start and end indexes of the table."
|
||||
# Das zurückgegebene Objekt sollte also `{"table_object": {...}, "startIndex": X, "endIndex": Y}` sein.
|
||||
# Und table_object enthält `created_table` mit `startIndex` (was wir als `tableStartIndex` brauchen).
|
||||
|
||||
# Laut der Doku zu `set_text_style_to_range` ist der Key im table_range Objekt `tableStartIndex` (großes S, kleines i).
|
||||
if res_table_obj and "table_object" in res_table_obj and "created_table" in res_table_obj["table_object"]:
|
||||
created_table_info = res_table_obj["table_object"]["created_table"]
|
||||
table_start_idx_for_style = created_table_info.get("startIndex") # Dies ist der StartIndex des Tabellenobjekts selbst
|
||||
|
||||
if table_start_idx_for_style is not None:
|
||||
header_range_for_style = {
|
||||
"tableStartIndex": table_start_idx_for_style, # Korrekter Schlüsselname für die Methode
|
||||
"rowIndex": 0,
|
||||
"columnIndex": 0,
|
||||
"rowSpan": 1,
|
||||
"colSpan": 3
|
||||
}
|
||||
text_style_bold = {"bold": True}; fields_bold = "bold"
|
||||
# KORREKTER METHODENNAME: set_text_style_to_range
|
||||
gtable_manager.set_text_style_to_range(text_style_bold, fields_bold, table_range=header_range_for_style)
|
||||
print(f" Kopfzeile für Tabelle '{gruppe_original}' versucht fett zu formatieren.")
|
||||
else: print(f" Konnte startIndex für Tabelle '{gruppe_original}' nicht erhalten für Formatierung.")
|
||||
else: print(f" Unerwartete Antwort von create_table für Formatierung: {res_table_obj}")
|
||||
|
||||
footer_lines_for_group = ["", f"{anzahl_kinder} angemeldete Kinder", "", "Dies ist die Liste der bereits angemeldeten Kinder. Bitte die Eltern der noch fehlenden", "Kinder an die Anmeldung erinnern.", "", f"Stand {stand_zeit}", ""]
|
||||
full_footer_text_for_group = "\n".join(footer_lines_for_group) + "\n"
|
||||
if full_footer_text_for_group.strip():
|
||||
# KORREKTER METHODENNAME: insert_text
|
||||
gtable_manager.insert_text(text=full_footer_text_for_group, index=None)
|
||||
|
||||
except Exception as e_table:
|
||||
print(f"Fehler bei Tabelle/Footer für Gruppe '{gruppe_original}': {e_table}")
|
||||
additional_requests_fallback.append({'insertText': {'endOfSegmentLocation': {}, 'text': f"\nFEHLER BEI TABELLE {gruppe_original}\n"}})
|
||||
|
||||
if i < len(sorted_gruppen_namen) - 1:
|
||||
try:
|
||||
# KORREKTER METHODENNAME: insert_page_break
|
||||
gtable_manager.insert_page_break(index=None)
|
||||
except Exception as e_pb:
|
||||
print(f"Fehler beim Einfügen des PageBreak nach {gruppe_original}: {e_pb}")
|
||||
additional_requests_fallback.append({'insertPageBreak': {'endOfSegmentLocation': {}}})
|
||||
|
||||
if additional_requests_fallback and docs_api_service:
|
||||
try:
|
||||
print(f"Sende zusätzliche Fallback-Requests für Doc ID '{document_id_to_fill}'...")
|
||||
docs_api_service.documents().batchUpdate(documentId=document_id_to_fill, body={'requests': additional_requests_fallback}).execute()
|
||||
except HttpError as err: print(f"Fehler bei zusätzlichen Fallback-Requests: {err}")
|
||||
|
||||
return True
|
||||
|
||||
# --- Main execution block ---
|
||||
# (Bleibt weitgehend gleich, ruft generate_tables_with_gdoctableapp auf)
|
||||
|
||||
Reference in New Issue
Block a user