So fügen Sie mit Python eine gerenderte HTML-Vorlage in ein Google-Dokument ein

王林
Freigeben: 2024-02-11 20:18:04
nach vorne
1283 Leute haben es durchsucht

如何使用 Python 将渲染的 HTML 模板插入 Google 文档

Frageninhalt

Ich stehe vor der Herausforderung, eine HTML-Vorlage mithilfe von Python programmgesteuert in ein Google-Dokument einzufügen. Ich weiß, dass es im Google Docs-Editor oder in der Google Docs-API keine native/integrierte Funktionalität gibt, die mein Problem lösen kann, aber ich habe einige Tricks ausprobiert, um mein Ziel zu erreichen. Hier ignorieren wir „wo“ im Dokument, das wir einfügen sollen, denn jetzt reicht nur das erfolgreiche Einfügen.

Meine Methode ist:

  1. Laden Sie die HTML-Datei mit dem Namen application/vnd.google-apps.document in Google Drive hoch, da Google Docs HTML automatisch in Doc konvertiert. (Nicht perfekt, aber effektiv)
  2. Verwenden Sie Google Docs API get(), um den Dateiinhalt abzurufen (Google Docs JSON-Format).
  3. Verwenden Sie Google Docs Batchupdate(), um die Zieldatei mit neuen Inhalten zu aktualisieren.
def insert_template_to_file(target_file_id, content):
    media = MediaIoBaseUpload(BytesIO(content.encode('utf-8')), mimetype='text/html', resumable=True)
    body = {
        'name': 'document_test_html',
        'mimeType': 'application/vnd.google-apps.document',
        'parents': [DOC_FOLDER_ID]
    }

    try:
        # Create HTML as docs because it automatically convert html to docs
        content_file = driver_service.files().create(body=body, media_body=media).execute()
        content_file_id = content_file.get('id')

        # Collect html content from Google Docs after created
        doc = docs_service.documents().get(documentId=content_file_id, fields='body').execute()
        request_content = doc.get('body').get('content')

        # Insert the content from html to target file
        result = docs_service.documents().batchUpdate(documentId=target_file_id, body={'requests': request_content}).execute()
        print(result)

        # Delete html docs
        driver_service.files().delete(fileId=content_file_id).execute()
        print("Content inserted successfuly")
    except HttpError as error:
        # Delete html docs even if failed
        driver_service.files().delete(fileId=content_file_id).execute()
        print(f"An error occurred: {error}")
Nach dem Login kopieren

Das Problem ist: Was ich aus Schritt 2 erfahre, stimmt nicht mit den Anforderungen von batchupdate() überein. Ich versuche, die Dinge in Schritt 2 an Schritt 3 anzupassen, aber es ist mir noch nicht gelungen.

Ziellösung: Erhalten Sie die Zeichenfolge mit dem HTML-Code, Fügen Sie den gerenderten HTML-Code in die Zieldatei in Google Docs ein. Das Ziel besteht darin, den vorhandenen Inhalt der Zieldatei an den HTML-Code anzuhängen und ihn nicht zu überschreiben.

Ist mein Ansatz sinnvoll? Habt ihr noch weitere Ideen, um mein Ziel zu erreichen?


Richtige Antwort


Ich glaube, Ihre Ziele sind wie folgt.

    Sie möchten HTML-Daten durch Rendern von HTML an ein Google-Dokument anhängen.
  • Um dies zu erreichen, möchten Sie Googleapis für Python verwenden.
Leider scheint das von „method:documents.get“ abgerufene JSON-Objekt zu diesem Zeitpunkt nicht direkt als Anforderungstext von „method:documents.batchupdate“ verwendet zu werden.

Wenn Sie jedoch HTML an ein vorhandenes Google-Dokument anhängen möchten, können Sie dies meiner Meinung nach nur mit der Laufwerks-API tun. Wie wäre es mit dem folgenden Beispielskript, wenn dies im Beispielskript widergespiegelt wird?

Beispielskript:

def insert_template_to_file(target_file_id, content):
    request = drive_service.files().export(fileId=target_file_id, mimeType="text/html")
    file = BytesIO()
    downloader = MediaIoBaseDownload(file, request)
    done = False
    while done is False:
        status, done = downloader.next_chunk()
        print("Download %d%%" % int(status.progress() * 100))
    file.seek(0)
    current_html = file.read()

    media = MediaIoBaseUpload(BytesIO(current_html + content.encode('utf-8')), mimetype='text/html', resumable=True)
    body = {'mimeType': 'application/vnd.google-apps.document'}

    try:
        result = drive_service.files().update(fileId=target_file_id, body=body, media_body=media).execute()
        print(result)
        print("Content inserted successfuly")
    except HttpError as error:
        print(f"An error occurred: {error}")
Nach dem Login kopieren
    In diesem modifizierten Skript werden die HTML-Daten aus einem vorhandenen Google-Dokument abgerufen und der neue HTML-Code an den abgerufenen HTML-Code angehängt. Außerdem werden Google-Dokumente mit aktualisiertem HTML aktualisiert. In Ihrem Fall scheinen die Rohdaten HTML zu sein. Daher denke ich, dass diese Methode funktionieren könnte.
Hinweis:

    Dieses Skript überschreibt die Google-Dokumente von
  • . Wenn Sie dieses Skript testen, empfehle ich Ihnen daher, die Beispiel-Google-Dokumente zu verwenden. target_file_id
Referenz:

Das obige ist der detaillierte Inhalt vonSo fügen Sie mit Python eine gerenderte HTML-Vorlage in ein Google-Dokument ein. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:stackoverflow.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!