【问题标题】:gpsread Google Sheets Protect Worksheet with Warninggpsread Google 表格保护工作表并发出警告
【发布时间】:2020-12-08 23:01:27
【问题描述】:

我正在尝试使用gspread 库来保护工作表并警告用户是否要进行更改,即使他们是编辑。

在 Google 表格中,这称为“编辑此范围时显示警告”

Gpsread 有一个函数add_protected_rangeHere。通过 gpsread 我运行 worksheet.add_protected_range('A1:J10', warning_only=True) 并出现错误

gspread.exceptions.APIError: {'code': 400, 'message': 'Invalid requests[0].addProtectedRange: ProtectedRange is warningOnly。无法对其设置编辑器。', 'status': 'INVALID_ARGUMENT'}

删除 warning_only 不会返回错误,但编辑者仍然可以进行编辑,这不是我的目标。

如何让它工作?

此外,此功能仅用于使范围受到保护。有没有办法保护整个工作表?

【问题讨论】:

  • 我能问你我对这个问题的回答吗?如果您对我的回答有疑问,我深表歉意。到时候,可以问一下你现在的情况吗?我想学习解决你的问题。

标签: python python-3.x google-sheets google-sheets-api gspread


【解决方案1】:

我相信你的目标如下。

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

问题一的答案:

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

参考资料:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-21
    • 1970-01-01
    • 2015-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-12
    • 1970-01-01
    相关资源
    最近更新 更多