GoogleSheets API:“收到无效的JSON有效负载。 “ data.values [0]”处的未知名称“ Number”:找不到字段

问题描述 投票:0回答:1

我正在尝试将一个电子表格的内容复制到另一个电子表格中,但错误不断弹出。您能帮忙弄清楚为什么不将数据从一张纸复制到另一张纸吗?这是我在原始工作表中正在尝试的虚拟数据:

1   CHANGED London 
2   5   Budapest
3   4   Prague
4   11  Madrid
4   11  Madrid

这是目标表的外观:

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')))
python google-sheets google-api google-sheets-api gspread
1个回答
0
投票

这个答案怎么样?

在您的脚本中,由LT_data = LT.get_all_records()检索到的值将用于Sheets API中电子表格.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 for python通过服务帐户获取和放置Google Spreadsheet的值。
  • 在您的情况下,需要能够使用服务帐户访问client.open("LetsTry")spreadsheetId = 'xyz'的电子表格。请注意这一点。

参考:

[如果我误解了您的问题,但这不是您想要的结果,我深表歉意。

© www.soinside.com 2019 - 2024. All rights reserved.