Cara memasukkan templat HTML yang diberikan ke dalam Dokumen Google menggunakan Python

王林
Lepaskan: 2024-02-11 20:18:04
ke hadapan
1331 orang telah melayarinya

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

Kandungan soalan

Saya menghadapi cabaran untuk memasukkan templat html secara pemrograman ke dalam dokumen google menggunakan python. Saya tahu tiada fungsi asli/terbina dalam dalam editor google docs atau google docs api yang boleh menyelesaikan masalah saya, tetapi saya mencuba beberapa helah untuk mencapai matlamat saya. Di sini kita mengabaikan "di mana" dalam dokumen yang harus kita masukkan, buat masa ini cukup dengan memasukkan yang berjaya.

Kaedah saya ialah:

  1. Muat naik fail html dalam pemacu google dengan nama application/vnd.google-apps.document kerana google docs akan menukar html kepada doc secara automatik. (Tidak sempurna, tetapi berkesan)
  2. Gunakan google docs api get() untuk mendapatkan kandungan fail (format google docs json).
  3. Gunakan google docs batchupdate() untuk mengemas kini fail sasaran dengan kandungan baharu.
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}")
Salin selepas log masuk

Masalahnya ialah: Apa yang saya kumpulkan daripada langkah 2 tidak sepadan dengan keperluan batchupdate(). Saya cuba melaraskan perkara dalam langkah 2 agar sepadan dengan langkah 3, tetapi masih belum berjaya.

Penyelesaian sasaran: Dapatkan rentetan dengan kod html, Masukkan html yang diberikan ke dalam fail sasaran di google docs. Matlamatnya adalah untuk menambahkan kandungan sedia ada fail sasaran pada html, bukan menimpanya.

Adakah pendekatan saya masuk akal? Adakah anda mempunyai idea lain untuk mencapai matlamat saya?


Jawapan betul


Saya percaya matlamat anda adalah seperti berikut.

  • Anda ingin menambahkan data html pada dokumen google dengan memaparkan html.
  • Anda mahu menggunakan googleapis untuk python untuk mencapai ini.

Malangnya, pada peringkat ini, objek json yang diambil oleh "method:documents.get" nampaknya tidak digunakan secara langsung sebagai badan permintaan "method:documents.batchupdate".

Walau bagaimanapun, jika anda ingin menambahkan html pada dokumen google sedia ada, saya fikir anda boleh melakukannya menggunakan api pemacu sahaja. Bagaimana dengan contoh skrip di bawah apabila ini ditunjukkan dalam skrip contoh?

Contoh skrip:

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}")
Salin selepas log masuk
  • Dalam skrip yang diubah suai ini, data html diambil daripada dokumen google sedia ada dan html baharu dilampirkan pada html yang diambil. Juga, dokumen google dikemas kini dengan html yang dikemas kini. Dalam kes anda, data mentah kelihatan seperti html. Jadi saya rasa kaedah ini mungkin berkesan.

Nota:

  • Skrip ini akan menimpa dokumen google target_file_id. Jadi apabila anda menguji skrip ini, saya syorkan anda menggunakan contoh google docs.

Rujukan:

Atas ialah kandungan terperinci Cara memasukkan templat HTML yang diberikan ke dalam Dokumen Google menggunakan Python. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:stackoverflow.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan