[[["容易理解","easyToUnderstand","thumb-up"],["確實解決了我的問題","solvedMyProblem","thumb-up"],["其他","otherUp","thumb-up"]],[["缺少我需要的資訊","missingTheInformationINeed","thumb-down"],["過於複雜/步驟過多","tooComplicatedTooManySteps","thumb-down"],["過時","outOfDate","thumb-down"],["翻譯問題","translationIssue","thumb-down"],["示例/程式碼問題","samplesCodeIssue","thumb-down"],["其他","otherDown","thumb-down"]],["上次更新時間:2025-08-29 (世界標準時間)。"],[],[],null,["# Named & protected ranges\n\nThe Google Sheets API lets you create, modify, and delete named or protected\nranges. The examples on this page illustrate how you can achieve some common\nSheets operations with the Sheets API.\n\nThese examples are presented in the form of HTTP requests to be language\nneutral. To learn how to implement a batch update in different languages using\nthe Google API client libraries, see [Update\nspreadsheets](/workspace/sheets/api/guides/batchupdate#example).\n\nIn these examples, the placeholders \u003cvar translate=\"no\"\u003eSPREADSHEET_ID\u003c/var\u003e and \u003cvar translate=\"no\"\u003eSHEET_ID\u003c/var\u003e\nindicates where you would provide those IDs. You can find the [spreadsheet\nID](/workspace/sheets/api/guides/concepts#spreadsheet) in the spreadsheet URL. You can get\nthe [sheet ID](/workspace/sheets/api/guides/concepts#sheet) by using the\n[`spreadsheets.get`](/workspace/sheets/api/reference/rest/v4/spreadsheets/get) method. The\nranges are specified using [A1 notation](/workspace/sheets/api/guides/concepts#cell). An\nexample range is Sheet1!A1:D5.\n\nAdditionally, the placeholders \u003cvar translate=\"no\"\u003eNAMED_RANGE_ID\u003c/var\u003e and \u003cvar translate=\"no\"\u003ePROTECTED_RANGE_ID\u003c/var\u003e\nprovide the IDs for the named and protected ranges. The `namedRangeId` and\n`protectedRangeId` are used when making requests to update or delete the\nassociated ranges. The ID is returned in the response to a Sheets API\nrequest that creates a named or protected range. You can get the IDs of existing\nranges with the\n[`spreadsheets.get`](/workspace/sheets/api/reference/rest/v4/spreadsheets/get) method, in\nthe\n[`Spreadsheet`](/workspace/sheets/api/reference/rest/v4/spreadsheets#resource-spreadsheet)\nresponse body.\n\nAdd named or protected ranges\n-----------------------------\n\nThe following\n[`spreadsheets.batchUpdate`](/workspace/sheets/api/reference/rest/v4/spreadsheets/batchUpdate)\ncode sample shows how to use 2 request objects. The first uses the\n[`AddNamedRangeRequest`](/workspace/sheets/api/reference/rest/v4/spreadsheets/request#addnamedrangerequest)\nto assign the range A1:E3 the name \"Counts\". The second uses the\n[`AddProtectedRangeRequest`](/workspace/sheets/api/reference/rest/v4/spreadsheets/request#addprotectedrangerequest)\nto attach a warning-level protection to the range A4:E4. This level protection\nstill allows cells within the range to be edited, but prompts a warning before\nmaking the change.\n\nThese requests return an\n[`AddNamedRangeResponse`](/workspace/sheets/api/reference/rest/v4/spreadsheets/response#addnamedrangeresponse)\nand an\n[`AddProtectedRangeResponse`](/workspace/sheets/api/reference/rest/v4/spreadsheets/response#addprotectedrangeresponse),\ncontaining the range IDs and properties.\n\nThe request protocol is shown below. \n\n POST https://sheets.googleapis.com/v4/spreadsheets/\u003cvar translate=\"no\"\u003eSPREADSHEET_ID\u003c/var\u003e:batchUpdate\n\n {\n \"requests\": [\n {\n \"addNamedRange\": {\n \"namedRange\": {\n \"name\": \"Counts\",\n \"range\": {\n \"sheetId\": \u003cvar translate=\"no\"\u003eSHEET_ID\u003c/var\u003e,\n \"startRowIndex\": 0,\n \"endRowIndex\": 3,\n \"startColumnIndex\": 0,\n \"endColumnIndex\": 5,\n },\n }\n }\n },\n {\n \"addProtectedRange\": {\n \"protectedRange\": {\n \"range\": {\n \"sheetId\": \u003cvar translate=\"no\"\u003eSHEET_ID\u003c/var\u003e,\n \"startRowIndex\": 3,\n \"endRowIndex\": 4,\n \"startColumnIndex\": 0,\n \"endColumnIndex\": 5,\n },\n \"description\": \"Protecting total row\",\n \"warningOnly\": true\n }\n }\n }\n ]\n }\n\nDelete named or protected ranges\n--------------------------------\n\nThe following\n[`spreadsheets.batchUpdate`](/workspace/sheets/api/reference/rest/v4/spreadsheets/batchUpdate)\ncode sample shows how to use 2 request objects. The first uses the\n[`DeleteNamedRangeRequest`](/workspace/sheets/api/reference/rest/v4/spreadsheets/request#deletenamedrangerequest)\nto delete an existing named range, using the \u003cvar translate=\"no\"\u003eNAMED_RANGE_ID\u003c/var\u003e from a\nprevious API call. The second uses the\n[`DeleteProtectedRangeRequest`](/workspace/sheets/api/reference/rest/v4/spreadsheets/request#deleteprotectedrangerequest)\nto delete an existing range protection, using the \u003cvar translate=\"no\"\u003ePROTECTED_RANGE_ID\u003c/var\u003e\nfrom a previous API call.\n\nThe request protocol is shown below. \n\n POST https://sheets.googleapis.com/v4/spreadsheets/\u003cvar translate=\"no\"\u003eSPREADSHEET_ID\u003c/var\u003e:batchUpdate\n\n {\n \"requests\": [\n {\n \"deleteNamedRange\": {\n \"namedRangeId\": \"\u003cvar translate=\"no\"\u003eNAMED_RANGE_ID\u003c/var\u003e\",\n }\n },\n {\n \"deleteProtectedRange\": {\n \"protectedRangeId\": \u003cvar translate=\"no\"\u003ePROTECTED_RANGE_ID\u003c/var\u003e,\n }\n }\n ]\n }\n\nUpdate named or protected ranges\n--------------------------------\n\nThe following\n[`spreadsheets.batchUpdate`](/workspace/sheets/api/reference/rest/v4/spreadsheets/batchUpdate)\ncode sample shows how to use 2 request objects. The first uses the\n[`UpdateNamedRangeRequest`](/workspace/sheets/api/reference/rest/v4/spreadsheets/request#updatenamedrangerequest)\nto update the name of an existing named range to \"InitialCounts\", using the \u003cvar translate=\"no\"\u003eNAMED_RANGE_ID\u003c/var\u003e\nfrom a previous API call. The second uses the\n[`UpdateProtectedRangeRequest`](/workspace/sheets/api/reference/rest/v4/spreadsheets/request#updateprotectedrangerequest)\nto update an existing protected range so that it now protects the same named\nrange. The\n[`Editors`](/workspace/sheets/api/reference/rest/v4/spreadsheets/sheets#Editors) method\nallows only the listed users to edit those cells. This request uses the \u003cvar translate=\"no\"\u003eNAMED_RANGE_ID\u003c/var\u003e\nand \u003cvar translate=\"no\"\u003ePROTECTED_RANGE_ID\u003c/var\u003e from previous API calls.\n\nThe request protocol is shown below. \n\n POST https://sheets.googleapis.com/v4/spreadsheets/\u003cvar translate=\"no\"\u003eSPREADSHEET_ID\u003c/var\u003e:batchUpdate\n\n```transact-sql\n{\n \"requests\": [\n {\n \"/workspace/sheets/api/reference/rest/v4/spreadsheets/request#updatenamedrangerequest\": {\n \"/workspace/sheets/api/reference/rest/v4/spreadsheets#namedrange\": {\n \"namedRangeId\": \u003cvar translate=\"no\"\u003eNAMED_RANGE_ID\u003c/var\u003e,\n \"name\": \"InitialCounts\",\n },\n \"fields\": \"name\",\n }\n },\n {\n \"/workspace/sheets/api/reference/rest/v4/spreadsheets/request#updateprotectedrangerequest\": {\n \"/workspace/sheets/api/reference/rest/v4/spreadsheets#protectedrange\": {\n \"protectedRangeId\": \u003cvar translate=\"no\"\u003ePROTECTED_RANGE_ID\u003c/var\u003e,\n \"namedRangeId\": \u003cvar translate=\"no\"\u003eNAMED_RANGE_ID\u003c/var\u003e,\n \"warningOnly\": false,\n \"/workspace/sheets/api/reference/rest/v4/spreadsheets#editors\": {\n \"users\": [\n \"charlie@example.com\",\n \"sasha@example.com\"\n ]\n }\n },\n \"fields\": \"namedRangeId,warningOnly,editors\"\n }\n }\n ]\n}\n```"]]