调用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
相关产品推荐
相关产品推荐

