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:
application/vnd.google-apps.document
kerana google docs akan menukar html kepada doc secara automatik. (Tidak sempurna, tetapi berkesan) 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}")
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?
Saya percaya matlamat anda adalah seperti berikut.
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?
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}")
target_file_id
. Jadi apabila anda menguji skrip ini, saya syorkan anda menggunakan contoh google docs. 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!