我正在尝试使用
gspread
库来保护工作表,并警告用户是否要进行更改,即使他们是编辑者也是如此。
在 Google 表格中,这称为“编辑此范围时显示警告”
Gpsread 有一个功能
add_protected_range
这里。通过 gpsread 我运行 worksheet.add_protected_range('A1:J10', warning_only=True)
并收到错误
gspread.exceptions.APIError:{'code':400,'message':'无效请求[0].addProtectedRange:ProtectedRange仅是警告。无法对其设置编辑器。', 'status': 'INVALID_ARGUMENT'}
删除
warning_only
不会返回错误,但编辑者仍然可以进行编辑,这不是我的目标。
如何让它发挥作用?
此功能仅适用于保护范围。有没有办法让整张纸都受到保护?
我相信你的目标如下。
A1:J10
的单元格时显示警告。当用户编辑受保护范围内的单元格时,您希望显示警告屏幕。当
warningOnly
为true
时,无法使用editors
的属性。但是,当我看到脚本add_protected_range
时,似乎包含了默认编辑器。 Ref我认为这样就会发生这样的错误。那么这种情况下,为了避免这种情况,直接使用batchUpdate方法怎么样?示例脚本如下。
spreadsheetId = "###" # Please set the Spreadsheet ID.
sheetName = "Sheet1" # Please set the sheet name.
client = gspread.authorize(credentials)
ss = client.open_by_key(spreadsheetId)
sheetId = ss.worksheet(sheetName)._properties['sheetId']
request_body = {
"requests": [
{
"addProtectedRange": {
"protectedRange": {
"range": {
"sheetId": sheetId,
"startRowIndex": 0,
"endRowIndex": 10,
"startColumnIndex": 0,
"endColumnIndex": 10
},
"warningOnly": True
}
}
}
]
}
res = ss.batch_update(request_body)
同样这种情况,直接使用batchUpdate方法怎么样?示例脚本如下。
spreadsheetId = "###" # Please set the Spreadsheet ID.
sheetName = "Sheet1" # Please set the sheet name.
client = gspread.authorize(credentials)
ss = client.open_by_key(spreadsheetId)
sheetId = ss.worksheet(sheetName)._properties['sheetId']
request_body = {
"requests": [
{
"addProtectedRange": {
"protectedRange": {
"range": {
"sheetId": sheetId,
},
"warningOnly": True
}
}
}
]
}
res = ss.batch_update(request_body)
如果某些预先存在的受保护范围未列出用于生成编辑器凭据的服务帐户,也可能会导致错误。