创建具有多个工作表的谷歌工作表

jac*_*118 1 google-sheets python-3.x google-drive-api

我尝试使用 google 驱动器 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()
Run Code Online (Sandbox Code Playgroud)

Tan*_*ike 7

  • 您想要在特定文件夹中创建新的电子表格。
  • 您想要通过创建多个工作表来创建新的电子表格。
  • 您想使用 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)
Run Code Online (Sandbox Code Playgroud)
  • 在这种情况下,第三个工作表名称作为sampleSheet示例。

模式2:

在此模式中,使用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()
Run Code Online (Sandbox Code Playgroud)
  • 在这种情况下,第三个工作表名称作为sampleSheet示例。

笔记:

  • 在上面的脚本中,假设您的授权脚本有效。

参考:

如果我误解了你的问题并且这不是你想要的方向,我很抱歉。

添加:

当您想要使用模式 1 并且想要将“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)
Run Code Online (Sandbox Code Playgroud)