【发布时间】:2017-03-24 04:04:30
【问题描述】:
一旦我执行了sheet = client.open_by_key('GoogleSheetKey').get_worksheet(0),sheet.cell(1,1) 会执行另一个对 Google API 的 HTTP 请求吗?还是当时正在处理本地对象?谢谢!
【问题讨论】:
标签: gspread
一旦我执行了sheet = client.open_by_key('GoogleSheetKey').get_worksheet(0),sheet.cell(1,1) 会执行另一个对 Google API 的 HTTP 请求吗?还是当时正在处理本地对象?谢谢!
【问题讨论】:
标签: gspread
是的,sheet.cell(1, 1)performs another HTTP request。这是设计使然:gspread 是一个“瘦”API 包装器,并将数据缓存留给最终用户。
但是,如果您修改多个单元格值,请考虑使用 Worksheet.update_cells 方法批量更新。
【讨论】:
cell_list = [<Cell R12C19 'status1'>, <Cell R12C25 'notes1'>, <Cell R992C19 'status2'>, <Cell R99C25 'notes2'>]?我正在循环遍历包含行号和要更新的列的 JSON 数据是固定的。我发现的唯一方法是update_cell = sheet.cell(12,19) 然后update_cell.value = 'status1' 然后cell_list.append(update_cell)。但这是对每个单元执行 HTTP 请求。我知道更新属于哪里,并且可以构建整个 cell_list 而无需 ping Google。
Worksheet.range 批量获取单元格,修改值并批量更新单元格列表。要创建 Cell 实例,gspread 需要先从 API 获取数据。从您的示例中,我可以看到您尝试更新的单元格不在同一行或同一列上。在这种情况下,我可以建议使用range() 获取包含目标单元格的单元格矩形,使用坐标元组作为键构建单元格映射,选择需要修改的单元格并仅更新选定的单元格带有update_cells的单元格。