gpsread Google 工作表保护工作表并发出警告
gpsread Google Sheets Protect Worksheet with Warning
我正在尝试使用 gspread
库来保护作品sheet 并警告用户是否要进行更改,即使他们是编辑者也是如此。
在 Google 表格中,这称为“编辑此范围时显示警告”
Gpsread 有一个函数 add_protected_range
Here。通过 gpsread I 运行 worksheet.add_protected_range('A1:J10', warning_only=True)
我得到一个错误
gspread.exceptions.APIError: {'code': 400, 'message': 'Invalid requests[0].addProtectedRange: ProtectedRange is warningOnly. Editors cannot be set on it.', 'status': 'INVALID_ARGUMENT'}
删除 warning_only
returns 没有错误,但编辑器仍然可以编辑,这不是我的目标。
我如何让它工作?
另外这个功能只对范围保护有效。有没有办法让整个 sheet 受到保护?
我相信你的目标如下。
- 问题 1:您想在用户编辑 sheet 中
A1:J10
的单元格时显示警告。当用户编辑受保护范围内的单元格时,您希望显示警告屏幕。
- 问题 2:您想保护 sheet 而不是范围。当用户编辑受保护 sheet 中的单元格时,您想显示警告屏幕。
问题 1 的答案:
当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)
- 当上述脚本为运行时,“Sheet1”的“A1:J10”单元格被保护。并且当用户编辑受保护范围内的单元格时,会打开警告屏幕。
问题 2 的答案:
这样的话,还有,直接使用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)
- 当上述脚本为运行时,“Sheet1”的sheet被保护。当用户编辑“Sheet1”中的单元格时,会打开警告屏幕。
参考文献:
我正在尝试使用 gspread
库来保护作品sheet 并警告用户是否要进行更改,即使他们是编辑者也是如此。
在 Google 表格中,这称为“编辑此范围时显示警告”
Gpsread 有一个函数 add_protected_range
Here。通过 gpsread I 运行 worksheet.add_protected_range('A1:J10', warning_only=True)
我得到一个错误
gspread.exceptions.APIError: {'code': 400, 'message': 'Invalid requests[0].addProtectedRange: ProtectedRange is warningOnly. Editors cannot be set on it.', 'status': 'INVALID_ARGUMENT'}
删除 warning_only
returns 没有错误,但编辑器仍然可以编辑,这不是我的目标。
我如何让它工作?
另外这个功能只对范围保护有效。有没有办法让整个 sheet 受到保护?
我相信你的目标如下。
- 问题 1:您想在用户编辑 sheet 中
A1:J10
的单元格时显示警告。当用户编辑受保护范围内的单元格时,您希望显示警告屏幕。 - 问题 2:您想保护 sheet 而不是范围。当用户编辑受保护 sheet 中的单元格时,您想显示警告屏幕。
问题 1 的答案:
当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)
- 当上述脚本为运行时,“Sheet1”的“A1:J10”单元格被保护。并且当用户编辑受保护范围内的单元格时,会打开警告屏幕。
问题 2 的答案:
这样的话,还有,直接使用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)
- 当上述脚本为运行时,“Sheet1”的sheet被保护。当用户编辑“Sheet1”中的单元格时,会打开警告屏幕。