python-3.x - 使用多个工作表创建 Google 工作表
问题描述
我尝试使用 google drive api 在指定文件夹中创建一个 google 表格。我的以下代码工作正常,除了我想创建一个包含多个工作表的文件。我试过了properties
。但是,它仍然显示为 Sheet1
file_metadata = {'properties': {'title': 'test title'}, 'name': 'google sheets filename', 'parents': [google_folder_id], 'mimeType': 'application/vnd.google-apps.spreadsheet', }
google_sheets_metadata = self.__service.files().create(body=file_metadata).execute()
解决方案
- 您想为特定文件夹创建新的电子表格。
- 您想通过创建多个工作表来创建新的电子表格。
- 您想使用 googleapis 和 python 来实现这一点。
- 您已经能够使用 Drive API。
如果我的理解是正确的,这个答案怎么样?请认为这只是几个可能的答案之一。
问题和解决方法:
Drive API 可以直接创建电子表格。但在这种情况下,无法使用多个工作表创建电子表格。所以在这种情况下,还需要使用 Sheets API。
在使用以下脚本之前,请启用 Sheets API。并请添加https://www.googleapis.com/auth/spreadsheets
到范围。在这种情况下,请删除token.pickle
包含访问令牌和刷新令牌的凭证文件( )并重新授权。这样,新的作用域就体现出来了。请注意这一点。
模式一:
在此模式中,使用 Drive API 的 create 方法将电子表格创建到特定文件夹后,使用 Sheets API 的 batchUpdate 方法将 2 个工作表添加到创建的电子表格中。
示例脚本:
sheets = build('sheets', 'v4', credentials=creds)
drive = build('drive', 'v3', credentials=creds)
google_folder_id = '###'
file_metadata = {'properties': {'title': 'test title'}, 'name': 'google sheets filename', 'parents': [google_folder_id], 'mimeType': 'application/vnd.google-apps.spreadsheet'}
google_sheets_metadata = drive.files().create(body=file_metadata).execute()
fileId = google_sheets_metadata['id']
body = {"requests": [{"addSheet": {}}, {"addSheet": {"properties": {"title": "sampleSheet"}}}]}
res = sheets.spreadsheets().batchUpdate(spreadsheetId=fileId, body=body).execute()
print(res)
- 在这种情况下,第 3 张工作表名称
sampleSheet
作为示例。
模式二:
在此模式中,使用 Sheets API 的创建方法将电子表格创建到具有 3 个工作表的根文件夹后,使用 Drive API 的更新方法将创建的电子表格移动到特定文件夹。
示例脚本:
sheets = build('sheets', 'v4', credentials=creds)
drive = build('drive', 'v3', credentials=creds)
google_folder_id = '###'
body = {"properties": {"title": "sampleSpreadsheet"}, "sheets": [{}, {}, {"properties": {"title": "sampleSheet"}}]}
res = sheets.spreadsheets().create(body=body).execute()
spreadsheetId = res['spreadsheetId']
google_sheets_metadata = drive.files().update(fileId=spreadsheetId, removeParents='root', addParents=google_folder_id).execute()
- 在这种情况下,第 3 张工作表名称
sampleSheet
作为示例。
笔记:
- 在上面的脚本中,它假设您的授权脚本有效。
参考:
如果我误解了您的问题并且这不是您想要的方向,我深表歉意。
添加:
当您想要使用模式 1 并且想要将“a”和“b”的工作表名称赋予第 1 个和第 2 个选项卡时,脚本如下。
当使用 Drive API 创建新的电子表格时,创建的电子表格有第一个选项卡。因此,在您的情况下,需要将第一张工作表重命名为“a”并添加一张名为“b”的工作表。
sheets = build('sheets', 'v4', credentials=creds)
drive = build('drive', 'v3', credentials=creds)
google_folder_id = '###'
file_metadata = {'properties': {'title': 'test title'}, 'name': 'google sheets filename', 'parents': [google_folder_id], 'mimeType': 'application/vnd.google-apps.spreadsheet'}
google_sheets_metadata = drive.files().create(body=file_metadata).execute()
fileId = google_sheets_metadata['id']
title = [{"addSheet": {"properties": {"title": name}}} for name in set(['b'])]
title.append({"updateSheetProperties": {"fields": "title", "properties": {"title": "a", "index": 0}}})
body = {"requests": title}
res = sheets.spreadsheets().batchUpdate(spreadsheetId=fileId, body=body).execute()
print(res)
推荐阅读
- google-chrome-extension - 使用清单 v3 在 Chrome 扩展新标签页中显示网站图标
- go - Pkcs11 ECDSA 签名返回 CKR_DATA_INVALID
- c++ - 为什么 ofstream 在存储字符串的值时会避免前 4 个字符?
- typescript - 告诉 ts 将存在两个变量之一
- powershell - Sharepoint 文件和页面活动的 Search-UnifiedAuditLog 不匹配
- c# - 是否有任何符合 rfc5055 标准的可用 SCVP 客户端?
- angular - 关于vercel cors问题中生产模式的角度项目[已解决]
- javascript - 使用 AWS Amplify API 在 React Native 中更新状态时出错
- .net - 如何从 MATLAB 生成 32 位 .net 框架 dll
- ssh - PyCharm SSH 解释器 GCP 虚拟机