- 您想为特定文件夹创建新的电子表格。
- 您想通过创建多个工作表来创建新的电子表格。
- 您希望使用 googleapis 和 python 来实现此目的。
- 您已经能够使用 Drive API。
如果我的理解是正确的,那么这个答案呢?请认为这只是几个可能的答案之一。
问题和解决方法:
Drive API 可以直接创建电子表格。但在这种情况下,无法使用多个工作表创建电子表格。所以在这种情况下,还需要使用 Sheets API。
在使用以下脚本之前,请启用 Sheets API。并将https://www.googleapis.com/auth/spreadsheets 添加到范围。在这种情况下,请删除包含访问令牌和刷新令牌的凭证文件(token.pickle)并重新授权。这样,新的作用域就体现出来了。请注意这一点。
模式一:
在此模式中,使用Drive API的create方法将Spreadsheet创建到特定文件夹后,使用Sheets API的batchUpdate方法将2个工作表添加到创建的Spreadsheet中。
示例脚本:
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)
- 在这种情况下,第三张工作表名称为
sampleSheet 作为示例。
模式 2:
在此模式中,使用 Sheets API 的 create 方法将 Spreadsheet 创建到具有 3 个工作表的根文件夹后,使用 Drive API 的 update 方法将创建的 Spreadsheet 移动到特定文件夹。
示例脚本:
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()
- 在这种情况下,第三张工作表名称为
sampleSheet 作为示例。
注意:
参考资料:
如果我误解了您的问题并且这不是您想要的方向,我深表歉意。
补充:
当你想使用模式 1 并且你想给第 1 和第 2 个选项卡的工作表名称“a”和“b”时,脚本如下。
使用 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)