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 的答案:

warningOnlytrue时,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”中的单元格时,会打开警告屏幕。

参考文献: