我尝试使用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()
问题来源:stackoverflow
如果我的理解是正确的,那么这个答案呢?请认为这只是几个可能的答案之一。
问题和解决方法:
Drive API可以直接创建电子表格。但是在这种情况下,不能使用多个工作表创建电子表格。因此,在这种情况下,还必须使用Sheets API。
在使用以下脚本之前,请启用Sheets API。并将“ https://www.googleapis.com/auth/spreadsheets ” 添加到范围。在这种情况下,请删除包含访问令牌的凭证文件(token.pickle
)和刷新令牌,然后再次授权。这样,新的作用域得以体现。请注意这一点。
模式1:
在这种模式下,使用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)
在这种模式下,使用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()
如果我误解了您的问题,而这不是您想要的方向,我深表歉意。
添加:
当您要使用模式1并希望将工作表名称“ a”和“ b”赋予第一和第二选项卡时,脚本如下。
使用Drive API创建新的电子表格时,创建的电子表格具有1st标签。因此,在您的情况下,需要将第一张工作表重命名为“ 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)
回答来源:stackoverflow
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。