Google Sheets API를 사용하면 명명된 범위 또는 보호된 범위를 만들고, 수정하고, 삭제할 수 있습니다. 이 페이지의 예에서는 Sheets API를 사용하여 일반적인 Sheets 작업을 수행하는 방법을 보여줍니다.
이러한 예는 언어에 구애받지 않도록 HTTP 요청의 형태로 제공됩니다. Google API 클라이언트 라이브러리를 사용하여 여러 언어로 일괄 업데이트를 구현하는 방법을 알아보려면 스프레드시트 업데이트를 참고하세요.
이 예에서 자리표시자 SPREADSHEET_ID 및 SHEET_ID는 이러한 ID를 제공할 위치를 나타냅니다. 스프레드시트 URL에서 스프레드시트 ID를 확인할 수 있습니다. spreadsheets.get 메서드를 사용하여 시트 ID를 가져올 수 있습니다. 범위는 A1 표기법을 사용하여 지정됩니다. 예를 들어 범위는 Sheet1!A1:D5입니다.
또한 자리표시자 NAMED_RANGE_ID 및 PROTECTED_RANGE_ID은 이름이 지정된 범위와 보호된 범위의 ID를 제공합니다. namedRangeId 및 protectedRangeId은 연결된 범위를 업데이트하거나 삭제하는 요청을 할 때 사용됩니다. 이 ID는 명명된 범위 또는 보호된 범위를 만드는 Sheets API 요청에 대한 응답으로 반환됩니다. Spreadsheet 응답 본문에서 spreadsheets.get 메서드를 사용하여 기존 범위의 ID를 가져올 수 있습니다.
다음 spreadsheets.batchUpdate 코드 샘플은 요청 객체 2개를 사용하는 방법을 보여줍니다. 첫 번째는 UpdateNamedRangeRequest를 사용하여 이전 API 호출의 NAMED_RANGE_ID를 사용하여 기존 명명된 범위의 이름을 'InitialCounts'로 업데이트합니다. 두 번째는 UpdateProtectedRangeRequest를 사용하여 기존 보호 범위를 업데이트하여 이제 이름이 같은 범위를 보호합니다. Editors 메서드를 사용하면 나열된 사용자만 해당 셀을 수정할 수 있습니다. 이 요청은 이전 API 호출의 NAMED_RANGE_ID 및 PROTECTED_RANGE_ID을 사용합니다.
요청 프로토콜은 다음과 같습니다.
POST https://sheets.googleapis.com/v4/spreadsheets/SPREADSHEET_ID:batchUpdate
[[["이해하기 쉬움","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(UTC)"],[],[],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```"]]