【问题标题】:gspread - does .cell(1,1) perform HTTP request?gspread - .cell(1,1) 是否执行 HTTP 请求?
【发布时间】:2017-03-24 04:04:30
【问题描述】:

一旦我执行了sheet = client.open_by_key('GoogleSheetKey').get_worksheet(0)sheet.cell(1,1) 会执行另一个对 Google API 的 HTTP 请求吗?还是当时正在处理本地对象?谢谢!

【问题讨论】:

    标签: gspread


    【解决方案1】:

    是的,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的单元格。
    • 有道理,感谢您的跟进。感谢@Burnash 创建/支持这样一个出色的 Python 库。作为初学者,正是像您这样直观的、有据可查的贡献使这次体验成为一种有益的体验。
    • 很高兴您发现它很有用。谢谢。
    猜你喜欢
    • 2021-10-09
    • 1970-01-01
    • 1970-01-01
    • 2011-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多