Je suis confronté à un défi pour insérer par programme un modèle HTML dans un document Google à l'aide de Python. Je sais qu'il n'existe aucune fonctionnalité native/intégrée dans l'éditeur Google Docs ou l'API Google Docs qui puisse résoudre mon problème, mais j'ai essayé quelques astuces pour atteindre mon objectif. Ici, nous ignorons "où" dans le document nous devrions insérer, pour l'instant, une simple insertion réussie suffit.
Ma méthode est la suivante :
application/vnd.google-apps.document
car Google Docs convertira automatiquement le HTML en doc. (Pas parfait, mais efficace) 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}")
Le problème est le suivant : Ce que je déduis de l'étape 2 ne correspond pas à ce qu'exige batchupdate(). J'essaie d'ajuster les choses à l'étape 2 pour qu'elles correspondent à l'étape 3, mais je n'ai pas encore réussi.
Solution cible : Obtenez la chaîne avec le code html, Insérez le code HTML rendu dans le fichier cible sur Google Docs. L'objectif est d'ajouter le contenu existant du fichier cible au code HTML, et non de l'écraser.
Mon approche a-t-elle du sens ? Avez-vous d'autres idées pour atteindre mon objectif ?
Je crois que vos objectifs sont les suivants.
Malheureusement, à ce stade, l'objet json récupéré par "method:documents.get" ne semble pas être directement utilisé comme corps de requête de "method:documents.batchupdate".
Cependant, si vous souhaitez ajouter du HTML à un document Google existant, je pense que vous pouvez le faire en utilisant uniquement l'API du lecteur. Qu’en est-il de l’exemple de script ci-dessous lorsque cela se reflète dans l’exemple de script ?
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
. Ainsi, lorsque vous testez ce script, je vous recommande d'utiliser les exemples de documents Google. Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!