gpsread Google Sheets 保护工作表并发出警告

问题描述 投票:0回答:2

我正在尝试使用

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
不会返回错误,但编辑者仍然可以进行编辑,这不是我的目标。

如何让它发挥作用?

此功能仅适用于保护范围。有没有办法让整张纸都受到保护?

python python-3.x google-sheets google-sheets-api gspread
2个回答
1
投票

我相信你的目标如下。

  • 问题1:您希望在用户编辑表单中
    A1:J10
    的单元格时显示警告。当用户编辑受保护范围内的单元格时,您希望显示警告屏幕。
  • 问题 2:您想要保护一个工作表而不是一个范围。当用户编辑受保护工作表中的单元格时,您希望显示警告屏幕。

问题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”工作表受到保护。当用户编辑“Sheet1”中的单元格时,会打开警告屏幕。

参考资料:


0
投票

如果某些预先存在的受保护范围未列出用于生成编辑器凭据的服务帐户,也可能会导致错误。

© www.soinside.com 2019 - 2024. All rights reserved.