Google Sheets API v4:添加命名或受保护的范围

Google Sheets API v4: Add named or protected ranges

无法从 Google Apps 脚本获取 Google Sheets API v4 代码以将 named/protected 范围添加到 Google Sheet,使用了此处的代码示例 [[link]][1]。它给出了错误(正确的 json 形式是什么?):

Invalid JSON payload received. Unknown name "requests": Cannot find field. (line 5, file "Code")

代码如下:

function protectSheet() {
    var sheetId = "sheet id";
    var spreadsheetId = "spreadsheet id";

    Sheets.Spreadsheets.Values.batchUpdate(
    {
        "requests": [
        {
            "addNamedRange": {
                "namedRange": {
                    "name": "Counts",
                    "range": {
                        "sheetId": sheetId,
                        "startRowIndex": 0,
                        "endRowIndex": 3,
                        "startColumnIndex": 0,
                        "endColumnIndex": 5,
                    },
                }
            }
        },
        {
            "addProtectedRange": {
                "protectedRange": {
                    "range": {
                        "sheetId": sheetId,
                        "startRowIndex": 3,
                        "endRowIndex": 4,
                        "startColumnIndex": 0,
                        "endColumnIndex": 5,
                    },
                    "description": "Protecting total row",
                    "warningOnly": true
                }
            }
        }
        ]
    }, spreadsheetId);
}


[1]: https://developers.google.com/sheets/api/samples/ranges

我认为您的请求正文是正确的。那么修改如下呢?

发件人:

Sheets.Spreadsheets.Values.batchUpdate(

收件人:

Sheets.Spreadsheets.batchUpdate(

参考:

如果您对请求正文有任何疑问,请告诉我。我要考虑的问题。

编辑:

Invalid value at 'requests[0].add_named_range.named_range.range.sheet_id' (TYPE_INT32), "sheet id" Invalid

从您的错误信息中,发现您使用sheet id作为sheet ID。因此,请将 sheet ID 从 sheet id 修改为正确的 ID。

如果您想手动检索 sheet ID。请检查 here

如果您想使用脚本检索 sheet ID,这个怎么样?

var spreadsheetId = "spreadsheet id"; // Please set spreadsheetId here.
var ss = SpreadsheetApp.openById(spreadsheetId);
var sheetId = ss.getSheetByName(sheetName).getSheetId(); // sheetName is the sheet name of each sheet.

var sheetId = ss.getSheets()[index].getSheetId(); // index is the index of sheet. This is start from 0.