You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用gspread调用Google Sheets API添加行时返回400 INVALID_ARGUMENT错误

使用gspread插入行时触发400错误:值无效的排查与解决

问题场景

尝试用gspread向Google表格插入行时,持续收到400响应,提示所有待添加值无效。即使简化代码只插入单个日期字符串(甚至"hello"),错误依旧。已确认表格ID正确(设置inherit_from_before=True时能看到带格式的新行插入),但无法理解简单字符串为何被判定为无效。

出错代码

client = gspread.oauth(credentials_filename="credentials.json")
sheet = client.open(constants_manager.SPREADSHEET_FILE_NAME)
worksheet = sheet.worksheet(constants_manager.SPREADSHEET_SHEET_NAME)

today_date = date.today().strftime("%d/%m/%Y")

old_num_rows = len(worksheet.get_all_values())
print(old_num_rows)
new_values = [today_date]
# for item in macros.values():
#     new_values.append(round(item,2))
#     print(type(item))

print(new_values)
worksheet.insert_rows(new_values, old_num_rows+1)

错误输出

['02/01/2024']
Traceback (most recent call last):
  File "/home/moorby/Documents/coding_projects/loseit_calorie_weight_data_tracker/main.py", line 63, in <module>
    main()
  File "/home/moorby/Documents/coding_projects/loseit_calorie_weight_data_tracker/main.py", line 59, in main
    worksheet.insert_rows(new_values)
  File "/home/moorby/.pyenv/versions/loseit_calorie_weight_data_tracker/lib/python3.11/site-packages/gspread/worksheet.py", line 2049, in insert_rows
    res = self.spreadsheet.values_append(range_label, params, body)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/moorby/.pyenv/versions/loseit_calorie_weight_data_tracker/lib/python3.11/site-packages/gspread/spreadsheet.py", line 141, in values_append
    r = self.client.request("post", url, params=params, json=body)
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/moorby/.pyenv/versions/loseit_calorie_weight_data_tracker/lib/python3.11/site-packages/gspread/client.py", line 93, in request
    raise APIError(response)
gspread.exceptions.APIError: {'code': 400, 'message': 'Invalid value at \'data.values[0]\' (type.googleapis.com/google.protobuf.ListValue), "02/01/2024"', 'status': 'INVALID_ARGUMENT', 'details': [{'@type': 'type.googleapis.com/google.rpc.BadRequest', 'fieldViolations': [{'field': 'data.values[0]', 'description': 'Invalid value at \'data.values[0]\' (type.googleapis.com/google.protobuf.ListValue), "02/01/2024"'}]}]}

解决思路

问题出在insert_rows的参数格式上:

  • insert_rows要求传入二维列表:外层列表代表多行数据,每个子列表代表一行的所有单元格值。
  • 你传入的[today_date]是一维列表,gspread会把它解析为“一行中的多个单元格”,但单个字符串不是Google Sheets API要求的ListValue类型,因此触发错误。

修正代码

只需将new_values改为二维列表格式:

new_values = [[today_date]]  # 外层列表包裹子列表,子列表对应一行的单元格
worksheet.insert_rows(new_values, old_num_rows+1)

如果需要插入多列的行,格式如下:

# 示例:插入包含日期、卡路里、体重的一行
new_values = [[today_date, 1800.5, 75.2]]

如果需要插入多行:

# 示例:插入两行数据
new_values = [
    ["02/01/2024", 1800.5, 75.2],
    ["03/01/2024", 1750.0, 74.9]
]

内容的提问来源于stack exchange,提问作者Mo0rBy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 06:33:11