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

使用Python向Google Sheet追加数据时遇APIError问题求助

问题分析与解决方法

核心错误原因

你调用append_rows()时传入的是JSON字符串(通过to_json()生成),但这个方法要求的参数是二维列表格式的数据集,这直接导致了Google Sheets API返回400参数错误。

修正步骤

  1. 将处理后的DataFrame转换为二维列表:用DataFrame.values.tolist()方法替代to_json(),这会把表格数据转换成符合append_rows()要求的格式。
  2. (可选)如果需要追加表头,可单独提取表头转为列表后先写入一次(避免循环里重复写入)。
  3. 确保每个冲浪点的数据都以正确格式追加到目标工作表。

修正后的代码

import requests
import pandas as pd
import gspread

gc = gspread.service_account(filename='creds.json')
sh = gc.open_by_key('152qSpr-4nK9V5uHOiYOWTWUx4ojjVNZMdSmFYov-n50')
waveData = sh.get_worksheet(0)
tideData = sh.get_worksheet(1)
lightData = sh.get_worksheet(2)

id_list = [
    '/Belmar-Surf-Report/3683/',
    '/Manasquan-Surf-Report/386/',
    '/Ocean-Grove-Surf-Report/7945/',
    '/Asbury-Park-Surf-Report/857/',
    '/Avon-Surf-Report/4050/',
    '/Bay-Head-Surf-Report/4951/',
    '/Belmar-Surf-Report/3683/',
    '/Boardwalk-Surf-Report/9183/',
]

# (可选)先写入表头,仅执行一次
# header = pd.read_html(requests.get('http://magicseaweed.com' + id_list[0]).text)[2].iloc[:9, [0,1,2,3,4,6,7,12,15]].columns.tolist()
# waveData.append_rows([header], value_input_option="USER_ENTERED")

for x in id_list:
    # 提取表格数据并转为二维列表
    df = pd.read_html(requests.get('http://magicseaweed.com' + x).text)[2].iloc[:9, [0,1,2,3,4,6,7,12,15]]
    data_rows = df.values.tolist()
    # 追加到工作表
    waveData.append_rows(data_rows, value_input_option="USER_ENTERED")

额外说明

如果要处理另外两个工作表(tideData、lightData),逻辑完全一致:只需提取对应位置的表格(比如pd.read_html(...)的索引从[2]换成[0]或[1]),转换为二维列表后调用对应工作表的append_rows()方法即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 14:10:16