删除索引后用空字符串更新 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,
}])
参考:
我正在 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,
}])