GoogleSheets API:"Invalid JSON payload received. Unknown name "Number" at 'data.values[0]': 找不到字段
GoogleSheets API:"Invalid JSON payload received. Unknown name "Number" at 'data.values[0]': Cannot find field
我正在尝试将一个跨页sheet 的内容复制到另一个跨页sheet,但错误不断出现。
您能帮忙弄清楚为什么它不将数据从一个 sheet 复制到另一个吗?
这是我在原始 sheet:
中试验的虚拟数据
1 CHANGED London
2 5 Budapest
3 4 Prague
4 11 Madrid
4 11 Madrid
这是目的地 sheet 的样子:
2 5 Budapest
2 5 Budapest
2 5 Budapest
这是我得到的错误的一部分:
Invalid JSON payload received. Unknown name "Weather" at 'data.values[0]': Cannot find field.
Invalid JSON payload received. Unknown name "City" at 'data.values[0]': Cannot find field.
Invalid JSON payload received. Unknown name "Number" at 'data.values[1]': Cannot find field.
Invalid JSON payload received. Unknown name "Weather" at 'data.values[1]': Cannot find field.
Invalid JSON payload received. Unknown name "City" at 'data.values[1]': Cannot find field.
Invalid JSON payload received. Unknown name "Number" at 'data.values[2]': Cannot find field.
这是脚本:
from oauth2client.service_account import ServiceAccountCredentials
from pprint import pprint
from googleapiclient import discovery
scope = ["https://spreadsheets.google.com/feeds",'https://www.googleapis.com/auth/spreadsheets',"https://www.googleapis.com/auth/drive.file","https://www.googleapis.com/auth/drive"]
creds = ServiceAccountCredentials.from_json_keyfile_name("creds.json", scope )
client = gspread.authorize(creds)
LT = client.open("LetsTry").sheet1
LT_data = LT.get_all_records()
NQ_all = client.open("NQ_all").sheet1
NQ_all_data = NQ_all.get_all_records()
service = discovery.build('sheets', 'v4', credentials=creds)
spreadsheetId = 'xyz'
range = 'Sheet1!A1:C11'
body = {
'values': LT_data
}
result = service.spreadsheets().values().append(
spreadsheetId=spreadsheetId,
range = range,
valueInputOption= 'RAW',
body=body).execute()
print('{0} cells updated.'.format(result.get('updatedCells')))
这个答案怎么样?
在您的脚本中,LT_data = LT.get_all_records()
检索到的值用于 Sheets API 中 spreadsheets.values.append 方法的请求正文。在 LT_data
的情况下,检索到的值为 JSON 对象。但是请求体的values
必须是二维数组。我认为您的错误消息的原因是这样的。
为了避免这个错误,下面的修改怎么样?
修改后的脚本:
当您的脚本修改时,请修改如下。
从:
LT_data = LT.get_all_records()
到:
LT_data = LT.get_all_values()
get_all_values()
检索到的值是二维数组。所以在这种情况下,它可以用于 body = {'values': LT_data}
.
注:
- 此答案假定您已经能够使用 gspread 和 googleapis 为 python 和服务帐户获取和输入 Google 电子表格的值。
- 在您的情况下,
client.open("LetsTry")
和 spreadsheetId = 'xyz'
的电子表格需要能够使用服务帐户访问。请注意这一点。
参考文献:
如果我误解了你的问题,这不是你想要的结果,我深表歉意。
我正在尝试将一个跨页sheet 的内容复制到另一个跨页sheet,但错误不断出现。 您能帮忙弄清楚为什么它不将数据从一个 sheet 复制到另一个吗? 这是我在原始 sheet:
中试验的虚拟数据1 CHANGED London
2 5 Budapest
3 4 Prague
4 11 Madrid
4 11 Madrid
这是目的地 sheet 的样子:
2 5 Budapest
2 5 Budapest
2 5 Budapest
这是我得到的错误的一部分:
Invalid JSON payload received. Unknown name "Weather" at 'data.values[0]': Cannot find field.
Invalid JSON payload received. Unknown name "City" at 'data.values[0]': Cannot find field.
Invalid JSON payload received. Unknown name "Number" at 'data.values[1]': Cannot find field.
Invalid JSON payload received. Unknown name "Weather" at 'data.values[1]': Cannot find field.
Invalid JSON payload received. Unknown name "City" at 'data.values[1]': Cannot find field.
Invalid JSON payload received. Unknown name "Number" at 'data.values[2]': Cannot find field.
这是脚本:
from oauth2client.service_account import ServiceAccountCredentials
from pprint import pprint
from googleapiclient import discovery
scope = ["https://spreadsheets.google.com/feeds",'https://www.googleapis.com/auth/spreadsheets',"https://www.googleapis.com/auth/drive.file","https://www.googleapis.com/auth/drive"]
creds = ServiceAccountCredentials.from_json_keyfile_name("creds.json", scope )
client = gspread.authorize(creds)
LT = client.open("LetsTry").sheet1
LT_data = LT.get_all_records()
NQ_all = client.open("NQ_all").sheet1
NQ_all_data = NQ_all.get_all_records()
service = discovery.build('sheets', 'v4', credentials=creds)
spreadsheetId = 'xyz'
range = 'Sheet1!A1:C11'
body = {
'values': LT_data
}
result = service.spreadsheets().values().append(
spreadsheetId=spreadsheetId,
range = range,
valueInputOption= 'RAW',
body=body).execute()
print('{0} cells updated.'.format(result.get('updatedCells')))
这个答案怎么样?
在您的脚本中,LT_data = LT.get_all_records()
检索到的值用于 Sheets API 中 spreadsheets.values.append 方法的请求正文。在 LT_data
的情况下,检索到的值为 JSON 对象。但是请求体的values
必须是二维数组。我认为您的错误消息的原因是这样的。
为了避免这个错误,下面的修改怎么样?
修改后的脚本:
当您的脚本修改时,请修改如下。
从:LT_data = LT.get_all_records()
到:
LT_data = LT.get_all_values()
get_all_values()
检索到的值是二维数组。所以在这种情况下,它可以用于body = {'values': LT_data}
.
注:
- 此答案假定您已经能够使用 gspread 和 googleapis 为 python 和服务帐户获取和输入 Google 电子表格的值。
- 在您的情况下,
client.open("LetsTry")
和spreadsheetId = 'xyz'
的电子表格需要能够使用服务帐户访问。请注意这一点。
参考文献:
如果我误解了你的问题,这不是你想要的结果,我深表歉意。