gspread 删除一系列单元格(向上)
gspread delete a range of cells (up)
使用 Python 的 GSpread 包,我如何使用 batch_update 向上删除一系列单元格?
示例代码:
sheet_id = self.worksheet.gs_worksheet._properties['sheetId']
start_index_col = self.cell_data_by_row_col[0][0].col - 1
end_index_col = self.cell_data_by_row_col[0][-1].col - 1
start_index_row = self.cell_data_by_row_col[0][0].row
end_index_row = self.cell_data_by_row_col[0][0].row
self.worksheet.gs_worksheet.batch_update({
'requests': [
{
'deleteRangeRequest': {
'range': {
'sheetId': sheet_id,
'startRowIndex': start_index_row,
'endRowIndex': end_index_row,
'startColumnIndex': start_index_col,
'endColumnIndex': end_index_col,
},
'shiftDimension': 'ROWS',
}
}
]
})
回复:
File "C:\Program Files\Python37\lib\site-packages\gspread\utils.py", line 559, in wrapper
return f(*args, **kwargs)
File "C:\Program Files\Python37\lib\site-packages\gspread\models.py", line 1166, in batch_update
for vr in data
File "C:\Program Files\Python37\lib\site-packages\gspread\models.py", line 1166, in <listcomp>
for vr in data
TypeError: string indices must be integers
我相信你的目标如下。
- 您想使用表格 API 中“spreadsheets.batchUpdate”方法的
deleteRangeRequest
删除范围 API。
- 您想通过 python.
使用 gspread 来实现此目的
修改点:
- 在gspread,好像
batch_update(body)
就是classgspread.models.Spreadsheet
的方法。在您的脚本中,我认为您可能会将其用作 class gspread.models.Worksheet
的方法。我认为这就是 string indices must be integers
错误消息的原因。
classgspread.models.Worksheet
的batch_update(data, **kwargs)
是“spreadsheets.values.batchUpdate”的方法。
- 在“spreadsheets.batchUpdate”方法中使用DeleteRangeRequest时,请按
deleteRange
使用。
当以上几点反映到脚本中时,就变成了下面这样。不幸的是,从你的脚本中,我无法理解 self.worksheet.gs_worksheet
的变量。所以在这个修改中,我使用了其他变量名。
修改后的脚本:
spreadsheetId = "###" # Please set the Spreadsheet Id.
sheetName = "Sheet1" # Please set the sheet name.
client = gspread.authorize(credentials)
spreadsheet = client.open_by_key(spreadsheetId)
sheet_id = spreadsheet.worksheet(sheetName)._properties['sheetId']
start_index_col = self.cell_data_by_row_col[0][0].col - 1
end_index_col = self.cell_data_by_row_col[0][-1].col - 1
start_index_row = self.cell_data_by_row_col[0][0].row
end_index_row = self.cell_data_by_row_col[0][0].row
spreadsheet.batch_update({
'requests': [
{
'deleteRange': {
'range': {
'sheetId': sheet_id,
'startRowIndex': start_index_row,
'endRowIndex': end_index_row,
'startColumnIndex': start_index_col,
'endColumnIndex': end_index_col,
},
'shiftDimension': 'ROWS',
}
}
]
})
参考文献:
使用 Python 的 GSpread 包,我如何使用 batch_update 向上删除一系列单元格?
示例代码:
sheet_id = self.worksheet.gs_worksheet._properties['sheetId']
start_index_col = self.cell_data_by_row_col[0][0].col - 1
end_index_col = self.cell_data_by_row_col[0][-1].col - 1
start_index_row = self.cell_data_by_row_col[0][0].row
end_index_row = self.cell_data_by_row_col[0][0].row
self.worksheet.gs_worksheet.batch_update({
'requests': [
{
'deleteRangeRequest': {
'range': {
'sheetId': sheet_id,
'startRowIndex': start_index_row,
'endRowIndex': end_index_row,
'startColumnIndex': start_index_col,
'endColumnIndex': end_index_col,
},
'shiftDimension': 'ROWS',
}
}
]
})
回复:
File "C:\Program Files\Python37\lib\site-packages\gspread\utils.py", line 559, in wrapper
return f(*args, **kwargs)
File "C:\Program Files\Python37\lib\site-packages\gspread\models.py", line 1166, in batch_update
for vr in data
File "C:\Program Files\Python37\lib\site-packages\gspread\models.py", line 1166, in <listcomp>
for vr in data
TypeError: string indices must be integers
我相信你的目标如下。
- 您想使用表格 API 中“spreadsheets.batchUpdate”方法的
deleteRangeRequest
删除范围 API。 - 您想通过 python. 使用 gspread 来实现此目的
修改点:
- 在gspread,好像
batch_update(body)
就是classgspread.models.Spreadsheet
的方法。在您的脚本中,我认为您可能会将其用作 classgspread.models.Worksheet
的方法。我认为这就是string indices must be integers
错误消息的原因。-
class
batch_update(data, **kwargs)
是“spreadsheets.values.batchUpdate”的方法。
gspread.models.Worksheet
的 - 在“spreadsheets.batchUpdate”方法中使用DeleteRangeRequest时,请按
deleteRange
使用。
当以上几点反映到脚本中时,就变成了下面这样。不幸的是,从你的脚本中,我无法理解 self.worksheet.gs_worksheet
的变量。所以在这个修改中,我使用了其他变量名。
修改后的脚本:
spreadsheetId = "###" # Please set the Spreadsheet Id.
sheetName = "Sheet1" # Please set the sheet name.
client = gspread.authorize(credentials)
spreadsheet = client.open_by_key(spreadsheetId)
sheet_id = spreadsheet.worksheet(sheetName)._properties['sheetId']
start_index_col = self.cell_data_by_row_col[0][0].col - 1
end_index_col = self.cell_data_by_row_col[0][-1].col - 1
start_index_row = self.cell_data_by_row_col[0][0].row
end_index_row = self.cell_data_by_row_col[0][0].row
spreadsheet.batch_update({
'requests': [
{
'deleteRange': {
'range': {
'sheetId': sheet_id,
'startRowIndex': start_index_row,
'endRowIndex': end_index_row,
'startColumnIndex': start_index_col,
'endColumnIndex': end_index_col,
},
'shiftDimension': 'ROWS',
}
}
]
})