首页 > 解决方案 > 使用多个工作表创建 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()

标签: python-3.xgoogle-sheetsgoogle-drive-api

解决方案


  • 您想为特定文件夹创建新的电子表格。
  • 您想通过创建多个工作表来创建新的电子表格。
  • 您想使用 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)

推荐阅读