【问题标题】:GoogleSheets API:"Invalid JSON payload received. Unknown name "Number" at 'data.values[0]': Cannot find fieldGoogleSheets API:“收到无效的 JSON 有效负载。‘data.values[0]’处的未知名称“数字”:找不到字段
【发布时间】:2020-02-21 16:25:49
【问题描述】:

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

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】:

    这个答案怎么样?

    在您的脚本中,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 电子表格的值。
    • 在您的情况下,client.open("LetsTry")spreadsheetId = 'xyz' 的电子表格必须能够使用服务帐户进行访问。请注意这一点。

    参考资料:

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

    【讨论】:

    • 谢谢!!!它确实解决了我的问题,现在它运行完美。
    • @Zsuzsanna Szucs 欢迎您。谢谢你让我知道。我很高兴你的问题得到了解决。如果您的问题得到解决,请按接受按钮。与您有相同问题的其他人也可以将您的问题作为可以解决的问题。我认为您的问题和解决方案将对他们有用。如果找不到按钮,请随时告诉我。 stackoverflow.com/help/accepted-answer
    • 非常感谢您的超级有用和描述性的回答!
    猜你喜欢
    • 1970-01-01
    • 2021-06-25
    • 1970-01-01
    • 2020-10-25
    • 1970-01-01
    • 2018-08-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-15
    相关资源
    最近更新 更多