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

Din*_*Din 3 javascript google-sheets google-apps-script google-sheets-api

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

收到无效的 JSON 负载。未知名称“请求”:找不到字段。(第 5 行,文件“代码”)

下面是代码:

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
Run Code Online (Sandbox Code Playgroud)

Tan*_*ike 5

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

从:

Sheets.Spreadsheets.Values.batchUpdate(
Run Code Online (Sandbox Code Playgroud)

到:

Sheets.Spreadsheets.batchUpdate(
Run Code Online (Sandbox Code Playgroud)

参考:

如果您对请求正文有任何问题,请告诉我。我想思考一下这些问题。

编辑:

“requests[0].add_named_range.named_range.range.sheet_id”处的值无效(TYPE_INT32),“工作表 ID”无效

从你的错误信息来看,发现你使用的sheet id是sheet ID。因此请将工作表 ID 修改为sheet id正确的 ID。

如果您想手动检索工作表 ID。请检查这里

如果你想使用脚本检索工作表 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.
Run Code Online (Sandbox Code Playgroud)

或者

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