删除索引后用空字符串更新 python gspread 列表

Updating python gspread list with empty string after index is removed

我正在 discord 中创建一个机器人来组织列表,然后通过 gspread 将列表更新为 google sheet。列表更新得很好,但是,如果有人将自己从列表中删除,则相应的单元格不会被删除,除非列表中有新人替换它们。我认为这是因为 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}
            )

新输出

想要这个输出

在这个答案中,使用了一个包含空值的虚拟列表。并且,在classgspread.models.Worksheet中使用batch_update的方法放置值。在这种情况下,使用一个 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,
}])

参考: