如何用gspread批量更新指定坐标单元格为同一值(规避谷歌限流)
批量更新指定单元格为"DONE"(规避谷歌API限流)
问题根源
你之前的代码无法运行,是因为worksheet.update_cells需要接收Cell对象列表,而非单纯的(row, col)元组;另外如果循环逐个更新单元格,会触发大量API请求,直接撞上限流配额。
解决方案(分两种场景)
场景1:单元格是连续范围(如你的案例)
观察你的元组列表,所有单元格都在第2列,行号从27到76,属于连续范围。这种情况直接更新整个范围,仅需1次API请求,最省配额:
# 定义连续范围的起止坐标 start_row, start_col = 27, 2 end_row, end_col = 76, 2 # 生成对应行数的更新数据(每行是["DONE"]的列表) update_values = [["DONE"] for _ in range(end_row - start_row + 1)] # 调用update方法,指定范围批量更新 worksheet.update( update_values, range_name=f"{chr(ord('A') + start_col - 1)}{start_row}:{chr(ord('A') + end_col - 1)}{end_row}" )
场景2:单元格是非连续分散的
如果你的元组列表是分散的非连续单元格,就需要先把元组转换成Cell对象,再批量提交,同样是1次API请求:
from gspread.models import Cell # 将(row, col)元组转换为Cell对象,统一设置value为"DONE" cell_list = [Cell(row=row, col=col, value="DONE") for row, col in list_of_tuples] # 批量更新单元格 worksheet.update_cells(cell_list)
核心优势
两种方案都只触发单次API请求,避免了循环迭代导致的多次请求,从根本上解决限流问题,同时也不需要额外提高API配额。
内容的提问来源于stack exchange,提问作者Zambo
相关产品推荐
相关产品推荐

