在现有工作簿中添加新电子表格会引发 HttpError "Unknown name requests"
Adding a new spreadsheet in an existing workbook raises HttpError "Unknown name requests"
我已经用下面显示的代码片段构建了 Google Sheets service
,我想知道如何创建一个新的电子表格(又名 tab) 在一个已经存在的 Google Sheet(工作簿)中 Python.
credentials = get_credentials(client_secret_file_path)
service = build('sheets', 'v4', credentials=credentials)
add_tab_request = {"requests": {"addSheet": {"properties": {"title": "New Tab"}}}}
request = service.spreadsheets().values().batchUpdate(spreadsheetId=<google_sheet_id>, body=add_tab_request)
执行此代码会出现 HttpError:
Invalid JSON payload received. Unknown name "requests": Cannot find field.
完整错误:
googleapiclient.errors.HttpError:
https://sheets.googleapis.com/v4/spreadsheets//values:batchUpdate?alt=json
returned "Invalid JSON payload received. Unknown name "requests": Cannot find field.">`
我进行了 很多 的 Google 搜索,但找不到解决此问题的方法。我也没有在 the Google Sheets API v4 official documentation 中找到这个。为什么我的请求不起作用?
经过@SiHa的建议,这段代码对我有用。希望这对以后的人有帮助。
credentials = get_credentials(client_secret_file_path)
service = build('sheets', 'v4', credentials=credentials)
add_tab_request = {"requests": {"addSheet": {"properties": {"title": "New Tab"}}}}
request = service.spreadsheets().batchUpdate(spreadsheetId=<google_sheet_id>, body=add_tab_request)
请注意,我必须从 API 调用中删除 values()
部分。
您可以通过两种方式添加工作表:
- 在创建时,使用 sheets.create 方法
- 随时使用sheets.batchUpdate方法
下面有一个片段演示了两者并在我的电脑上工作 (python 3.6)
import os
import pickle
from googleapiclient.discovery import build
from google_auth_oauthlib.flow import InstalledAppFlow
from google.auth.transport.requests import Request
SCOPES = ['https://www.googleapis.com/auth/spreadsheets', ]
if not os.path.exists('credentials.dat'):
flow = InstalledAppFlow.from_client_secrets_file('client_id.json', SCOPES)
credentials = flow.run_local_server()
with open('credentials.dat', 'wb') as credentials_dat:
pickle.dump(credentials, credentials_dat)
else:
with open('credentials.dat', 'rb') as credentials_dat:
credentials = pickle.load(credentials_dat)
if credentials.expired:
credentials.refresh(Request())
spreadsheet_sdk = build('sheets', 'v4', credentials=credentials)
# we create a new sheet at creation time of the spreadsheet
create_body = {
'properties': {
'title': 'Newly created sheet',
'locale': 'en_US',
},
'sheets': [
{
'properties': {
'sheetId': 0,
'title': "Created at creation time",
'index': 0,
'sheetType': 'GRID',
'gridProperties': {
'rowCount': 2,
'columnCount': 2,
},
},
}
]
}
new_google_spreadsheet = spreadsheet_sdk.spreadsheets().create(body=create_body).execute()
# we add a sheet to an existing spreadsheet
add_sheet_params = {
'spreadsheetId': new_google_spreadsheet['spreadsheetId'],
'body': {
'requests': [
{
'addSheet': {
'properties': {
'sheetId': 1,
'title': "Added later",
'index': 0,
'sheetType': 'GRID',
'gridProperties': {
'rowCount': 2,
'columnCount': 2,
},
}
}
}
],
'includeSpreadsheetInResponse': False
}
}
new_sheet_add = spreadsheet_sdk.spreadsheets().batchUpdate(**add_sheet_params).execute()
print(new_sheet_add)
我已经用下面显示的代码片段构建了 Google Sheets service
,我想知道如何创建一个新的电子表格(又名 tab) 在一个已经存在的 Google Sheet(工作簿)中 Python.
credentials = get_credentials(client_secret_file_path)
service = build('sheets', 'v4', credentials=credentials)
add_tab_request = {"requests": {"addSheet": {"properties": {"title": "New Tab"}}}}
request = service.spreadsheets().values().batchUpdate(spreadsheetId=<google_sheet_id>, body=add_tab_request)
执行此代码会出现 HttpError:
Invalid JSON payload received. Unknown name "requests": Cannot find field.
完整错误:
googleapiclient.errors.HttpError:
https://sheets.googleapis.com/v4/spreadsheets//values:batchUpdate?alt=json
returned "Invalid JSON payload received. Unknown name "requests": Cannot find field.">`
我进行了 很多 的 Google 搜索,但找不到解决此问题的方法。我也没有在 the Google Sheets API v4 official documentation 中找到这个。为什么我的请求不起作用?
经过@SiHa的建议,这段代码对我有用。希望这对以后的人有帮助。
credentials = get_credentials(client_secret_file_path)
service = build('sheets', 'v4', credentials=credentials)
add_tab_request = {"requests": {"addSheet": {"properties": {"title": "New Tab"}}}}
request = service.spreadsheets().batchUpdate(spreadsheetId=<google_sheet_id>, body=add_tab_request)
请注意,我必须从 API 调用中删除 values()
部分。
您可以通过两种方式添加工作表:
- 在创建时,使用 sheets.create 方法
- 随时使用sheets.batchUpdate方法
下面有一个片段演示了两者并在我的电脑上工作 (python 3.6)
import os
import pickle
from googleapiclient.discovery import build
from google_auth_oauthlib.flow import InstalledAppFlow
from google.auth.transport.requests import Request
SCOPES = ['https://www.googleapis.com/auth/spreadsheets', ]
if not os.path.exists('credentials.dat'):
flow = InstalledAppFlow.from_client_secrets_file('client_id.json', SCOPES)
credentials = flow.run_local_server()
with open('credentials.dat', 'wb') as credentials_dat:
pickle.dump(credentials, credentials_dat)
else:
with open('credentials.dat', 'rb') as credentials_dat:
credentials = pickle.load(credentials_dat)
if credentials.expired:
credentials.refresh(Request())
spreadsheet_sdk = build('sheets', 'v4', credentials=credentials)
# we create a new sheet at creation time of the spreadsheet
create_body = {
'properties': {
'title': 'Newly created sheet',
'locale': 'en_US',
},
'sheets': [
{
'properties': {
'sheetId': 0,
'title': "Created at creation time",
'index': 0,
'sheetType': 'GRID',
'gridProperties': {
'rowCount': 2,
'columnCount': 2,
},
},
}
]
}
new_google_spreadsheet = spreadsheet_sdk.spreadsheets().create(body=create_body).execute()
# we add a sheet to an existing spreadsheet
add_sheet_params = {
'spreadsheetId': new_google_spreadsheet['spreadsheetId'],
'body': {
'requests': [
{
'addSheet': {
'properties': {
'sheetId': 1,
'title': "Added later",
'index': 0,
'sheetType': 'GRID',
'gridProperties': {
'rowCount': 2,
'columnCount': 2,
},
}
}
}
],
'includeSpreadsheetInResponse': False
}
}
new_sheet_add = spreadsheet_sdk.spreadsheets().batchUpdate(**add_sheet_params).execute()
print(new_sheet_add)