【问题标题】:Google Sheets API v4: Add named or protected rangesGoogle Sheets API v4:添加命名或受保护的范围
【发布时间】:2018-12-14 06:52:33
【问题描述】:

无法从 Google Apps 脚本中获取用于向 Google 表格添加命名/受保护范围的 Google Sheets API v4 代码,使用此处 [[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

【问题讨论】:

    标签: javascript google-apps-script google-sheets google-sheets-api


    【解决方案1】:

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

    发件人:

    Sheets.Spreadsheets.Values.batchUpdate(
    

    收件人:

    Sheets.Spreadsheets.batchUpdate(
    

    参考:

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

    编辑:

    'requests[0].add_named_range.named_range.range.sheet_id' (TYPE_INT32) 处的值无效,“sheet id”无效

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

    如果您想手动检索工作表 ID。请查看here

    如果你想使用脚本来检索工作表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.
    

    【讨论】:

    • Sheets.Spreadsheets.Values.batchUpdate 更改为Sheets.Spreadsheets.batchUpdate 现在会出现以下错误:'requests[0].add_named_range.named_range.range.sheet_id' (TYPE_INT32) 处的值无效,"sheet id" Invalid
    • @Din 对于给您带来的不便,我深表歉意。我认为大师的评论是正确的。在您的情况下,认为问题的原因是 sheetId 不正确。当sheetId 被用作错误的ID 时,就会出现这样的错误。从你的错误中,它可以看到"sheet id" Invalid。您使用 "sheet id" 作为工作表 ID。这就是问题所在。那么你能再次确认正确的工作表ID吗?例如,在新的电子表格中,第一张工作表的工作表 ID 为 0
    • @Din 因为我不确定错误是否被删除,所以我更新了我的答案。你能确认一下吗?如果错误没有消除,请告诉我。
    • @Tanaike 非常感谢。它正在工作。还有一件事,将"warningOnly": true 更改为false 试图保护范围免受更改,但它仍然允许编辑。还是就此发表另一个问题更好?
    • @Din 感谢您的回复。如果你想只允许编辑几个范围并保护其他范围,这个过程怎么样? 1. 保护一张纸。 2.取消保护您要允许编辑的范围。我记得a recent question 对您的情况很有用。我认为虽然在那个问题中使用了SpreadsheetApp服务,但同样的情况可以通过Sheets API来实现。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-13
    • 2018-11-08
    相关资源
    最近更新 更多