【问题标题】:gspread update multiple cells not in rangegspread 更新多个不在范围内的单元格
【发布时间】:2016-12-04 10:50:49
【问题描述】:

在我的应用程序中,我有一堆不在范围内的单元格。目前我正在一一更新它们,但这需要很多时间。我想只打一个电话就可以批量更新它们。

我查看了其他一些 SO 线程,例如 this,但在我的情况下,单元格不在范围内。

为了简化这里是我试图实现的一个例子:

worksheet.update_acell("A1", "test1")
worksheet.update_acell("C5", "test2")

是否可以一次调用更新不在范围内的单元格?

【问题讨论】:

  • 我相信加载所有表格、根据需要操作数据然后再次更新所有表格会更快。
  • 例如,您可以尝试这种方法:stackoverflow.com/questions/34400635/…。如果你的桌子不是太大,它会很有效。

标签: python google-sheets gspread


【解决方案1】:

是的,这是可能的。您可以为此使用Worksheet.update_cells 方法。

该方法的参数是Cell 对象的列表,该列表来自何处并不重要。您可以从range 方法获取它或自己创建列表:

a1 = worksheet.acell('A1')
c5 = worksheet.acell('C5')
a1.value = 'Hello'
c5.value = 'World'
wk.update_cells([a1, c5])

这会在一次调用中更新多个单元格。

【讨论】:

  • 您好 Burnash,感谢您的回答。问题是通过 acell 读取单元仍然会单独调用 API,这很耗时。如果有另一种方法可以在不先读取单元格对象的情况下创建它,那么这将是完美的答案。
  • 这是真的。现在要获得Cell 实例,您需要提出请求。在后台,它获取构建另一个 xml 以发出更新请求所需的一段 xml。尽管您的里程可能会有所不同,但通常读取请求比写入请求快。因此,与多个更新请求相比,使用一个 update_cells() 仍然会有所改进。
  • 好像有人提出了类似的问题github.com/burnash/gspread/issues/376
【解决方案2】:

Burnhash 是正确的,因为没有请求就无法获得 Cell。但是,我能够使用虚拟类实现所需的行为:

    class Cell:
        def __init__(self, c, r, v):
            self.col = c
            self.row = r
            self.value = v

    cell1 = Cell(1, 1, 'value1')  # A1
    cell2 = Cell(2, 1, 'value2')  # B1
    wk.update_cells([cell1, cell2])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多