首页 > 解决方案 > 删除索引后用空字符串更新python gspread列表

问题描述

我正在创建一个不和谐的机器人来组织列表,然后通过 gspread 将列表更新到谷歌表。列表更新得很好,但是,如果有人将自己从列表中删除,则相应的单元格不会被删除,除非有新人在列表中替换了它们。我认为这是因为 python 如何处理简单的空格的列表。因此 gspread 没有任何东西会忽略它。因此,我的问题是,如果列表不包含一个空字符串,我如何强制 gspread 用空字符串更新每个单元格?谢谢。

# Some codes

import gspread

gc = gspread.service_account(filename = 'a json')
sh = gc.open_by_key("a key")


# My lists
list1 = ["a","b","c"]
list2 = ["d","e","f"]

list_of_lists = [list1, list2]

# Update list into sheet

sh.values_update(
                'Sheet1!A1:C2', # fixed cells
                params={'valueInputOption': 'RAW'},
                body={'values': list_of_lists}
            )

输出

老的

# Update with new list

list1.remove("a")
list2.remove("d")

# Rerun list update
sh.values_update(
                'Sheet1!A1:C2', # fixed cells
                params={'valueInputOption': 'RAW'},
                body={'values': list_of_lists}
            )

新输出

新的

想要这个输出

通缉

标签: pythongoogle-sheetsgoogle-sheets-apigspread

解决方案


在这个答案中,使用了一个包含空值的虚拟列表。并且,这些值是使用batch_update类 gspread.models.Worksheet 中的方法放置的。在这种情况下,使用一个 API 调用。

修改后的脚本:

sh = gc.open_by_key("a key")
sheetName = 'Sheet1'  # Please set the sheet name.
worksheet = sh.worksheet(sheetName)

# My lists
list1 = ["a", "b", "c"]
list2 = ["d", "e", "f"]

list_of_lists = [list1, list2]
dummy = [[''] * len(e) for e in list_of_lists]

list1.remove("a")
list2.remove("d")

worksheet.batch_update([{
    'range': 'A1:C2',
    'values': dummy,
}, {
    'range': 'A1:C2',
    'values': list_of_lists,
}])

参考:


推荐阅读