使用 gspread 和 python 更新谷歌表格中的行的问题

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

我正在为一个游戏创建一个程序,它查询游戏 API,从那里获取数据,我在内部将其解析为列表,然后 gspread 将它上传到我创建的文档模板中的 Google 工作表。 列表有多种数据类型,示例如下:

['Example', 7, 1, 9, 16, 247, 0.6153846153846154, 1726.6914683999998, 32517, 0.3731858415138197, 13896, 0.11760574089286983, 9441, 13101, 0.24403464654931545, 'Red', 2, 83, 0, 2, 5, 2, 3, 107, 176, 6231, 3088, 0, 31, 73, 0, 2, 0, 5, 0, 8, 0, 0, 0, 0, 1, 0, 0]

对于 gspread api 调用,我使用以下内容:

a_notation = "B" +str(row) + ":AT"+ str(row)
    
wks.update(a_notation, my_data_row3)

B列中的行和开始是为了适合我正在使用的文档模板。

我一直在尝试各种不同的方法来构建数据以使其工作,但是我一直被 API 拒绝。最近常见的API响应码是:

gspread.exceptions.APIError: {'code': 400, 'message': 'Requested writing within range [sotest!B3:AT3], but tried writing to row [4]', 'status': 'INVALID_ARGUMENT'}

这次尝试的工作表名称是“sotest”,所以它没有任何奇怪的字符或任何东西。

我试过创建一个列表列表,每个元素都是一个“单元格”,但它也有自己的错误。这只是一个片段,但它会继续针对每个单元格。示例错误消息:

gspread.exceptions.APIError: {'code': 400, 'message': 'Invalid value at \'data.values[0]\' (type.googleapis.com/google.protobuf.ListValue), "Example"\nInvalid value at \'data.values[1]\'

您应该如何调用 Google Sheets API 以使用不同数据类型的列表更新单行中的一系列单元格? ChatGPT 在这里并没有太大帮助。

python python-3.x google-sheets-api gspread
1个回答
0
投票

根据文档的“更新单元格”部分,您需要将整个数据集包装到另一个列表中。所以代替:

['Example', 7, 1, 9, ...]

你需要:

[['Example', 7, 1, 9, ...]]

即使更新单行也需要嵌套列表,但您也可以在运行时包装数据集

my_data_row3 = [my_data_row3]

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