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

调用gspread的worksheet.batch_update方法报TypeError错误如何解决

报错原因
  • 传参结构不符合worksheet.batch_update的接口要求:该方法要求传入的批量操作数据是字典构成的列表,列表中每个字典对应一个独立的更新范围,需包含range(目标范围)、values(写入值)两个键。你当前直接传入了单个字典,方法内部遍历入参时,实际遍历到的是字典的字符串键('range'、'values'),此时执行vr["range"]去读取字符串的键值,就会触发TypeError: string indices must be integers。
  • 额外说明:如果仅需向单个连续范围批量写入单元格值,不需要同时处理多范围更新、单元格格式修改等操作,不需要调用通用批量接口,使用专门的值写入方法更简便。
修复方案

根据实际使用场景二选一即可:

方案1:修正batch_update传参(适合多范围批量操作场景)

将传入的单个字典包裹为列表,符合接口的参数结构要求:

floor = [typeFloor, titleFloor, href, m2Floor, roomsFloor, priceFloor]
listaFinal.append(floor)
rangeRows = f'A2:F{len(listaFinal)}'
# 传入字典组成的列表
worksheet.batch_update([
    {
        'range': rangeRows,
        'values': listaFinal
    }
])

方案2:使用专用值写入接口(适合当前单范围写值场景)

如果仅需批量写入单元格内容,直接调用worksheet.update即可,该方法原生支持批量写入,参数格式和你现有写法一致,不需要包裹列表,写入性能完全满足大量数据导入需求:

floor = [typeFloor, titleFloor, href, m2Floor, roomsFloor, priceFloor]
listaFinal.append(floor)
rangeRows = f'A2:F{len(listaFinal)}'
worksheet.update(range_name=rangeRows, values=listaFinal)

注意事项

写入前需确认listaFinal是标准二维列表:每个子元素对应一行数据,每行长度和目标写入范围的列数(A到F共6列)一致,避免出现写入错位问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 04:30:54