Sheets API v3에서 이전

Google Sheets API v3를 기반으로 하는 기존 앱이 있는 경우 Google Sheets API v4로 이전할 수 있습니다. v4 버전은 JSON 기반이며 인터페이스가 사용하기 쉽고 v3 버전에서는 지원하지 않는 많은 기능이 추가되었습니다.

이 페이지에서는 이전 버전의 Sheets API v3 명령어와 Sheets API v4에 대응하는 해당 작업을 매핑하여 설명합니다. 이 매핑은 주로 spreadsheets.values 컬렉션에 집중합니다. 이 컬렉션은 직접 셀 읽기 및 쓰기 기능을 제공합니다. 시트 추가 또는 시트 속성 업데이트와 같은 다른 측면은 spreadsheets 컬렉션에 의해 처리됩니다. v4 API의 JSON 구조는 v3에서 사용된 XML 구조와 호환되지 않습니다.

Sheets v4 API에서 사용할 수 있는 리소스에 관한 자세한 내용은 API 참조를 참고하세요.

표기법 및 용어

v3 API에서는 특정 스프레드시트 내의 시트를 "워크시트"라고 합니다. 이것은 v4 API에서 사용하는 '시트'라는 용어와 동의어입니다.

일반적으로 API에서는 작업 중인 스프레드시트의 스프레드시트 ID를 지정해야 합니다. 또한 조작 중인 시트의 ID도 필요한 경우가 많습니다. 이러한 값은 API 엔드포인트 URL의 일부 또는 쿼리 매개변수로 또는 요청 본문의 일부로 표시됩니다. 이 페이지에서 spreadsheetIdsheetId 자리표시자는 각각 스프레드시트와 시트 ID를 나타냅니다. 이 페이지에 설명된 메서드를 사용할 때 이러한 위치의 실제 ID를 대체하세요.

또한 v3 API는 목록 피드를 사용하여 검색된 행에 ID를 할당합니다. 이 페이지에서 rowId 자리표시자로 표시됩니다.

요청 승인

앱이 실행되면 사용자에게 특정 권한을 부여하도록 요청합니다. 애플리케이션에서 지정하는 범위에 따라 앱에서 요청하는 권한이 결정됩니다.

v3 API

Sheets API v3는 단일 승인 범위로 작동합니다.

https://spreadsheets.google.com/feeds

이것은

https://www.googleapis.com/auth/spreadsheets

두 범위 형식을 사용할 수 있습니다.

v4 API

Sheets API v4에서는 다음 범위 집합 중 하나 이상을 사용합니다.

https://www.googleapis.com/auth/spreadsheets.readonly
https://www.googleapis.com/auth/spreadsheets
https://www.googleapis.com/auth/drive.readonly
https://www.googleapis.com/auth/drive

애플리케이션에서 사용자의 시트 또는 시트 속성을 수정할 필요가 없는 경우 읽기 전용 범위를 사용하세요. 애플리케이션에서 일반적인 Drive 액세스가 필요하지 않은 경우에는 Drive 범위 대신 스프레드시트 범위를 사용하세요.

공개 상태

이전 버전의 API에서 공개 상태라는 용어는 지정된 스프레드시트의 가용성을 나타내는 데 사용됩니다.

v3 API

Sheets API v3는 가시성을 엔드포인트에 직접 표현합니다. public 스프레드시트는 '웹에 게시'되어 승인 없이 API에서 액세스할 수 있지만 private 스프레드시트에는 인증이 필요합니다. 공개 상태는 스프레드시트 ID 뒤의 엔드포인트에서 지정됩니다.

https://spreadsheets.google.com/feeds/worksheets/spreadsheetId/private/full

v4 API

새로운 Sheets API v4에서는 명시적인 가시성 선언이 없습니다. API 호출은 스프레드시트 ID를 사용하여 이루어집니다. 애플리케이션에 지정된 스프레드시트에 액세스할 권한이 없으면 오류가 반환됩니다. 그러지 않으면 호출이 진행됩니다.

투영

투영이라는 용어는 Sheets API v3에서 지정된 API 호출에서 반환되는 데이터 집합(모두 또는 API 내에 정의된 고정된 하위 집합)을 나타내는 데 사용됩니다. Sheets API v4에서는 프로젝션을 사용하지 않으며 반환되는 데이터를 더 세밀하게 제어할 수 있습니다.

v3 API

Sheets API v3에서 사용할 수 있는 투영 설정은 두 가지뿐입니다. full 투영은 사용 가능한 모든 정보를 반환하는 반면 basic는 더 작고 고정된 데이터 하위 집합을 반환합니다 (워크시트, 목록, 셀 피드의 경우). 공개 상태와 마찬가지로 투영은 공개 상태 설정 후 API 엔드포인트에서 지정해야 합니다.

https://spreadsheets.google.com/feeds/worksheets/spreadsheetId/public/basic

basic 프로젝션에서 제공하는 데이터의 작은 하위 집합은 코드를 더 효율적으로 만드는 데 유용하지만 맞춤설정할 수는 없습니다.

v4 API

Sheets API v4는 전체 데이터 세트를 반환할 수 있지만, Sheets API v3의 basic 공개 상태 설정과 유사한 고정된 하위 집합을 정의하지는 않습니다. 스프레드시트 컬렉션의 메서드는 fields 쿼리 매개변수를 사용하여 반환되는 데이터의 양을 제한합니다.

예를 들어 다음 쿼리는 특정 스프레드시트에 있는 모든 시트의 제목만 반환합니다.

GET https://sheets.googleapis.com/v4/spreadsheets/spreadsheetId?fields=sheets.properties.title

스프레드시트 만들기

v3 API

Sheets API v3는 새 스프레드시트를 만드는 방법을 제공하지 않습니다. 대신 Drive API Files.create 메서드를 사용하여 새 스프레드시트 파일을 만들 수 있습니다. 이를 위해서는 애플리케이션이 https://www.googleapis.com/auth/drive 범위를 선언해야 합니다.

v4 API

Drive API Files.create 메서드는 Sheets API v4에서도 사용할 수 있지만 애플리케이션에서 https://www.googleapis.com/auth/drive 범위를 제공해야 합니다.

동등한 대안으로 Sheets API v4에서 제공하는 spreadsheets.create 메서드는 선택적으로 시트를 추가하고 스프레드시트 및 시트 속성을 설정하고 이름이 지정된 범위를 추가할 수도 있습니다. 예를 들어 다음은 새 스프레드시트를 만들고 'NewTitle'이라는 이름을 지정합니다.

POST https://sheets.googleapis.com/v4/spreadsheets
{
 "properties": {"title": "NewTitle"}
}

인증된 사용자의 스프레드시트 나열

v3 API

Sheets API v3 피드를 사용하면 애플리케이션에서 인증된 사용자가 액세스할 수 있는 모든 스프레드시트 목록을 검색할 수 있습니다. 스프레드시트 피드 엔드포인트는 다음과 같습니다.

GET https://spreadsheets.google.com/feeds/spreadsheets/private/full

v4 API

Sheets API v4에서는 이러한 특정 작업을 제공하지 않습니다. 앱을 이전하는 경우 스프레드시트 선택을 위해 Google 선택 도구와 함께 drive.file 범위를 사용하는 것이 좋습니다.

스프레드시트를 나열해야 하는 경우 mimeType 쿼리를 사용하여 Drive API Files.list 메서드를 통해 복제할 수 있습니다.

GET https://www.googleapis.com/drive/v3/files
             ?q=mimeType='application/vnd.google-apps.spreadsheet'

Drive API files.list 메서드를 사용하여 사용자의 모든 스프레드시트를 나열하려면 restricted 범위가 필요합니다.

시트 메타데이터 가져오기

Sheets API v3는 지정된 스프레드시트 내에 포함된 시트 메타데이터에 액세스하기 위한 피드를 제공합니다 (행 및 셀 데이터는 별도의 피드를 통해 액세스). 메타데이터에는 시트 제목 및 크기 정보와 같은 정보가 포함됩니다.

Sheets API v4 spreadsheets.get 메서드를 사용하면 이 정보에 액세스할 수 있으며 그 외의 많은 기능에 액세스할 수 있습니다.

v3 API

워크시트 피드는 이 API 엔드포인트에서 적절한 승인 헤더를 사용하여 액세스할 수 있습니다.

GET https://spreadsheets.google.com/feeds/worksheets/spreadsheetId/private/full

이 요청에 대한 응답은 다음과 유사한 구조를 가지며 각 시트의 데이터가 별도의 <entry>에 포함됩니다.

<feed xmlns="http://www.w3.org/2005/Atom"
    xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/"
    xmlns:gs="http://schemas.google.com/spreadsheets/2006"
    xmlns:gd="http://schemas.google.com/g/2005"
    gd:etag='W/"D0cERnk-eip7ImA9WBBXGEg."'>
  <id>https://spreadsheets.google.com/feeds/worksheets/spreadsheetId/private/full</id>
  <updated>2006-11-17T18:23:45.173Z</updated>
  <title type="text">Groceries R Us</title>
  <link rel="alternate" type="text/html"
      href="https://spreadsheets.google.com/ccc?key=spreadsheetId"/>
  <link rel="http://schemas.google.com/g/2005#feed"
      type="application/atom+xml"
      href="https://spreadsheets.google.com/feeds/worksheets/spreadsheetId/private/full"/>
  <link rel="self" type="application/atom+xml"
      href="https://spreadsheets.google.com/feeds/worksheets/spreadsheetId/private/full"/>
  <link rel="http://schemas.google.com/g/2005#post" type="application/atom+xml"
      href="https://spreadsheets.google.com/feeds/worksheets/spreadsheetId/private/full"/>
  <author>
    <name>Fitzwilliam Darcy</name>
    <email>fitz@example.com</email>
  </author>
  <openSearch:totalResults>1</openSearch:totalResults>
  <openSearch:startIndex>1</openSearch:startIndex>
  <openSearch:itemsPerPage>1</openSearch:itemsPerPage>
  <entry gd:etag='"YDwqeyI."'>
    <id>https://spreadsheets.google.com/feeds/worksheets/spreadsheetId/private/full/sheetId</id>
    <updated>2006-11-17T18:23:45.173Z</updated>
    <title type="text">Sheet1</title>
    <content type="text">Sheet1</content>
    <link rel="http://schemas.google.com/spreadsheets/2006#listfeed"
        type="application/atom+xml"
        href="https://spreadsheets.google.com/feeds/list/spreadsheetId/sheetId/private/full"/>
    <link rel="http://schemas.google.com/spreadsheets/2006#cellsfeed"
        type="application/atom+xml"
        href="https://spreadsheets.google.com/feeds/cells/spreadsheetId/sheetId/private/full"/>
    <link rel="self" type="application/atom+xml"
        href="https://spreadsheets.google.com/feeds/worksheets/spreadsheetId/private/full/sheetId"/>
    <link rel="edit" type="application/atom+xml"
        href="https://spreadsheets.google.com/feeds/worksheets/spreadsheetId/private/full/sheetId/version"/>
    <gs:rowCount>100</gs:rowCount>
    <gs:colCount>20</gs:colCount>
  </entry>
</feed>

v4 API

spreadsheets.get 메서드를 사용하면 Sheets API v3를 사용할 때보다 훨씬 더 많은 시트 속성과 기타 메타데이터를 가져올 수 있습니다. 시트 속성만 읽으려면 includeGridData 쿼리 매개변수를 false로 설정하여 스프레드시트 셀 데이터가 포함되지 않도록 합니다.

GET https://sheets.googleapis.com/v4/spreadsheets/spreadsheetId?includeGridData=false

Spreadsheet 응답에는 Sheet 객체의 배열이 포함됩니다. 시트 제목과 크기 정보는 객체의 SheetProperties 요소 아래에서 찾을 수 있습니다. 예를 들면 다음과 같습니다.

{
  "spreadsheetId": spreadsheetId,
  "sheets": [
      {"properties": {
          "sheetId": sheetId,
          "title": "Sheet1",
          "index": 0,
          "gridProperties": {
              "rowCount": 100,
              "columnCount": 20,
              "frozenRowCount": 1,
              "frozenColumnCount": 0,
              "hideGridlines": false
          },
          ...
       },
       ...
      },
      ...
  ],
  ...
}

스프레드시트에 시트 추가

두 API 모두 새 시트를 기존 스프레드시트에 추가할 수 있습니다.

v3 API

Sheets API v3에서는 다음과 같은 (인증된) POST 요청을 실행하여 새 워크시트를 스프레드시트에 추가할 수 있습니다. 새 시트의 크기를 지정할 수 있습니다.

POST https://spreadsheets.google.com/feeds/worksheets/spreadsheetId/private/full
<entry xmlns="http://www.w3.org/2005/Atom"
    xmlns:gs="http://schemas.google.com/spreadsheets/2006">
  <title>Expenses</title>
  <gs:rowCount>50</gs:rowCount>
  <gs:colCount>10</gs:colCount>
</entry>

v4 API

spreadsheets.batchUpdate 메서드에서 AddSheet 요청을 실행하여 새 시트를 추가할 수 있습니다. 요청 본문의 일부로 새 시트의 시트 속성을 지정할 수 있습니다. 모든 속성은 선택사항입니다. 기존 시트에 사용되는 제목을 제공하면 오류가 발생합니다.

POST https://sheets.googleapis.com/v4/spreadsheets/spreadsheetId:batchUpdate
{
  "requests": [{
      "addSheet": {
          "properties": {
            "title": "Expenses",
            "sheetType": "GRID",
            "gridProperties": {
              "rowCount": 50,
              "columnCount": 10
            }
          }
      }
  }],
}

시트 제목 및 크기 변경

Sheets API v3에서는 시트 제목과 크기를 업데이트할 수 있으며, Sheets API v4에서는 이 작업도 허용하지만 다른 시트 속성을 업데이트하는 데 사용할 수도 있습니다. 시트 크기를 줄이면 잘린 셀의 데이터가 경고 없이 삭제될 수 있습니다.

v3 API

워크시트의 제목이나 크기를 변경하려면 먼저 워크시트 피드를 검색하고 edit URL이 포함된 원하는 워크시트 항목을 찾습니다. 워크시트의 메타데이터를 업데이트하고 PUT 요청의 본문으로 이를 edit URL에 전송합니다. 예를 들면 다음과 같습니다.

PUT https://spreadsheets.google.com/feeds/worksheets/spreadsheetId/private/full/sheetId/version
<entry>
  <id>
    https://spreadsheets.google.com/feeds/worksheets/spreadsheetId/private/full/sheetId
  </id>
  <updated>2007-07-30T18:51:30.666Z</updated>
  <category scheme="http://schemas.google.com/spreadsheets/2006"
    term="http://schemas.google.com/spreadsheets/2006#worksheet"/>
  <title type="text">Expenses</title>
  <content type="text">Expenses</content>
  <link rel="http://schemas.google.com/spreadsheets/2006#listfeed"
    type="application/atom+xml" href="https://spreadsheets.google.com/feeds/list/spreadsheetId/sheetId/private/full"/>
  <link rel="http://schemas.google.com/spreadsheets/2006#cellsfeed"
    type="application/atom+xml" href="https://spreadsheets.google.com/feeds/cells/spreadsheetId/sheetId/private/full"/>
  <link rel="self" type="application/atom+xml"
    href="https://spreadsheets.google.com/feeds/worksheets/spreadsheetId/private/full/sheetId"/>
  <link rel="edit" type="application/atom+xml"
    href="https://spreadsheets.google.com/feeds/worksheets/spreadsheetId/private/full/sheetId/version"/>
  <gs:rowCount>45</gs:rowCount>
  <gs:colCount>15</gs:colCount>
</entry>

v4 API

크기, 제목, 기타 시트 속성을 업데이트하려면 spreadsheets.batchUpdate 메서드에서 updateSheetProperties 요청을 실행합니다. POST 요청 본문에는 변경할 속성이 포함되어야 하며 fields 매개변수는 이러한 속성을 명시적으로 나열해야 합니다(모든 속성을 업데이트하려면 모두 나열하기 위한 약식 표현으로 fields:"*" 사용). 예를 들어 다음은 지정된 ID가 있는 시트의 시트 제목 및 크기 속성을 업데이트해야 한다고 지정합니다.

POST https://sheets.googleapis.com/v4/spreadsheets/spreadsheetId:batchUpdate
{
  "requests": [
    {
      "updateSheetProperties": {
          "properties": {
            "sheetId": sheetId,
            "title": "Expenses",
            "gridProperties": {
              "rowCount": 45,
              "columnCount": 15,
            }
          },
          "fields": "title,gridProperties(rowCount,columnCount)"
     }
   }
  ],
}

시트의 sheetId를 검색하려면 스프레드시트의 spreadsheets.get 메서드를 사용합니다.

시트 삭제

두 API는 지정된 스프레드시트에서 시트를 삭제할 수 있습니다.

v3 API

워크시트를 삭제하려면 먼저 워크시트 피드를 검색한 다음 대상 워크시트 항목의 edit URL로 DELETE 요청을 전송합니다.

DELETE https://spreadsheets.google.com/feeds/worksheets/spreadsheetId/private/full/sheetId/version

v4 API

시트를 삭제하려면 spreadsheets.batchUpdate 메서드에서 DeleteSheet 요청을 수행합니다. POST 요청 본문에는 삭제할 시트의 sheetId만 포함되어야 합니다. 예를 들면 다음과 같습니다.

POST https://sheets.googleapis.com/v4/spreadsheets/spreadsheetId:batchUpdate
{
  "requests": [
    {
      "deleteSheet": {
        "sheetId": sheetId
      }
    }
  ],
}

개별 시트의 sheetId를 검색하려면 스프레드시트 spreadsheets.get 메서드를 사용합니다.

행 데이터 검색

목록 행 피드는 Sheets API v3에서 스프레드시트의 셀 (다른 하나는 셀 피드) 내의 데이터에 액세스하기 위해 제공하는 두 가지 메서드 중 하나입니다. 행 피드는 일반적인 스프레드시트 작업 (행별 읽기, 행 추가, 정렬)을 지원하기 위한 용도이지만, 일부 작업에 적합하지 않은 특정 가정을 합니다. 특히 목록 피드는 빈 행이 피드 종료이고 시트의 첫 번째 행에 필수 헤더가 있다고 가정합니다.

반면 Sheets API v4에서는 행별 액세스 메서드를 사용하지 않습니다. 대신 A1 표기법을 사용하여 필요한 특정 범위를 참조하는 방식으로 시트 셀 데이터에 액세스합니다. 범위는 셀 블록, 전체 행, 전체 열 또는 전체 시트가 될 수 있습니다. API는 분리된 셀 집합에 액세스할 수도 있습니다.

v3 API

지정된 워크시트의 목록 기반 피드의 URL을 확인하려면 워크시트 피드를 검색하고 원하는 워크시트 항목에서 목록 피드 URL을 찾습니다.

목록 기반 피드를 검색하려면 적절한 승인 헤더를 사용하여 GET 요청을 목록 피드 URL에 전송합니다. 예를 들면 다음과 같습니다.

GET https://spreadsheets.google.com/feeds/list/spreadsheetId/sheetId/private/full

이 요청에 대한 응답에는 특정 행에 해당하는 항목이 포함됩니다. 개별 셀은 (필수) 시트 헤더 행에 제공된 이름으로 참조됩니다. 예를 들어 다음은 단일 행 항목입니다.

<entry gd:etag='"S0wCTlpIIip7ImA0X0QI"'>
  <id>rowId</id>
  <updated>2006-11-17T18:23:45.173Z</updated>
  <category scheme="http://schemas.google.com/spreadsheets/2006"
      term="http://schemas.google.com/spreadsheets/2006#list"/>
  <title type="text">Bingley</title>
  <content type="text">Hours: 10, Items: 2, IPM: 0.0033</content>
  <link rel="self" type="application/atom+xml"
      href="https://spreadsheets.google.com/feeds/list/spreadsheetId/sheetId/private/full/rowId"/>
  <link rel="edit" type="application/atom+xml"
      href="https://spreadsheets.google.com/feeds/list/spreadsheetId/sheetId/private/full/rowId/version"/>
  <gsx:name>Bingley</gsx:name>
  <gsx:hours>10</gsx:hours>
  <gsx:items>2</gsx:items>
  <gsx:ipm>0.0033</gsx:ipm>
</entry>

기본적으로 목록 피드에 반환되는 행은 행 순서로 반환됩니다. Sheets API v3에서는 이 순서를 변경하는 쿼리 매개변수를 제공합니다.

역순:

GET https://spreadsheets.google.com/feeds/list/spreadsheetId/sheetId/private/full?reverse=true

특정 열을 기준으로 정렬:

GET https://spreadsheets.google.com/feeds/list/spreadsheetId/sheetId/private/full
             ?orderby=column:lastname

Sheets API v3에서는 구조화된 쿼리 (열 헤더별로 참조됨)를 통해 특정 행을 필터링할 수도 있습니다.

GET https://spreadsheets.google.com/feeds/list/spreadsheetId/sheetId/private/full
             ?sq=age>25%20and%20height<175

v4 API

Sheets API v4에서는 spreadsheets.values.get 또는 spreadsheets.values.batchGet 메서드를 사용하여 범위별로 행을 검색할 수 있습니다. 예를 들어 다음은 'Sheet1'의 모든 행을 반환합니다.

GET https://sheets.googleapis.com/v4/spreadsheets/spreadsheetId/values/Sheet1

이 요청에 대한 응답은 다음과 유사한 구조를 갖습니다.

{
  "range": "Sheet1",
  "majorDimension": "ROWS",
  "values": [["Name", "Hours", "Items", "IPM"],
             ["Bingley", "10", "2", "0.0033"],
             ["Darcy", "14", "6", "0.0071"]]
}

전체 행, 열 또는 시트를 검색할 때 후행 빈 셀은 응답에 포함되지 않습니다.

Sheets API v4에는 Sheets API v3에서 제공하는 행 순서 쿼리 매개변수에 상응하는 매개변수가 없습니다. 역순은 간단합니다. 반환된 values 배열을 역순으로 처리하기만 하면 됩니다. 열 기준 정렬은 읽기에 지원되지 않지만 SortRange 요청을 사용하여 시트의 데이터를 정렬한 다음 읽을 수 있습니다.

현재 Sheets API v4에는 Sheets API v3 구조화된 쿼리에 직접 상응하는 기능이 없습니다. 하지만 애플리케이션에서 필요에 따라 관련 데이터를 검색하여 정렬할 수 있습니다.

새 데이터 행 추가

두 API 중 하나를 사용하여 새 데이터 행을 시트에 추가할 수 있습니다.

v3 API

지정된 워크시트의 목록 기반 피드의 URL을 확인하려면 워크시트 피드를 검색하고 원하는 워크시트 항목에서 게시물 URL을 찾습니다.

데이터 행을 추가하려면 적절한 승인 헤더를 사용하여 POST 요청을 post URL에 보냅니다. 예를 들면 다음과 같습니다.

POST https://spreadsheets.google.com/feeds/list/spreadsheetId/sheetId/private/full

POST 요청의 본문에는 추가할 행 데이터에 대한 항목이 포함되어야 하며 개별 셀은 열 헤더별로 참조되어야 합니다.

<entry xmlns="http://www.w3.org/2005/Atom"
       xmlns:gsx="http://schemas.google.com/spreadsheets/2006/extended">
  <gsx:hours>2</gsx:hours>
  <gsx:ipm>0.5</gsx:ipm>
  <gsx:items>60</gsx:items>
  <gsx:name>Elizabeth</gsx:name>
</entry>

지정된 시트의 끝에 새 행이 추가됩니다.

v4 API

Sheets API v4에서는 spreadsheets.values.append 메서드를 사용하여 행을 추가할 수 있습니다. 다음 예시에서는 스프레드시트의 'Sheet1'에 있는 마지막 테이블 아래에 새 데이터 행을 씁니다.

POST https://sheets.googleapis.com/v4/spreadsheets/spreadsheetId/append/Sheet1

{
   "values": [["Elizabeth", "2", "0.5", "60"]]
}

또한 Sheets API v4에서는 spreadsheets.batchUpdate에서 AppendCells 요청을 사용하여 특정 속성과 서식이 지정된 셀을 추가할 수도 있습니다.

새 데이터로 행 수정

두 API 모두 행 데이터를 새 값으로 업데이트할 수 있습니다.

v3 API

데이터 행을 수정하려면 목록 피드를 검사하여 업데이트할 행의 항목을 찾습니다. 필요에 따라 해당 항목의 콘텐츠를 업데이트합니다. 사용하는 항목의 ID 값이 기존 항목의 ID와 정확히 일치해야 합니다.

항목이 업데이트되면 적절한 승인 헤더를 사용하여 해당 항목이 포함된 PUT 요청을 해당 행 항목에 제공된 edit URL에 요청 본문으로 전송합니다. 예를 들면 다음과 같습니다.

PUT https://spreadsheets.google.com/feeds/list/spreadsheetId/sheetId/private/full/rowId/version
<entry gd:etag='"S0wCTlpIIip7ImA0X0QI"'>
  <id>rowId</id>
  <updated>2006-11-17T18:23:45.173Z</updated>
  <category scheme="http://schemas.google.com/spreadsheets/2006"
    term="http://schemas.google.com/spreadsheets/2006#list"/>
  <title type="text">Bingley</title>
  <content type="text">Hours: 10, Items: 2, IPM: 0.0033</content>
  <link rel="self" type="application/atom+xml"
    href="https://spreadsheets.google.com/feeds/list/spreadsheetId/sheetId/private/full/rowId"/>
  <link rel="edit" type="application/atom+xml"
    href="https://spreadsheets.google.com/feeds/list/spreadsheetId/sheetId/private/full/rowId/version"/>
  <gsx:name>Bingley</gsx:name>
  <gsx:hours>20</gsx:hours>
  <gsx:items>4</gsx:items>
  <gsx:ipm>0.0033</gsx:ipm>
</entry>

v4 API

Sheets API v4에서는 수정하려는 행의 A1 표기법을 사용하고 spreadsheets.values.update 요청을 실행하여 행을 수정할 수 있습니다. 지정된 범위는 행의 첫 번째 셀만 참조하며, API는 요청과 함께 제공된 값을 기반으로 업데이트할 셀을 유추합니다. 그 대신 다중 셀 범위를 지정하는 경우에는 제공하는 값이 해당 범위 내에 들어가야 합니다. 그렇지 않으면 API에서 오류를 반환합니다.

다음은 'Sheet1'의 네 번째 행에 데이터를 추가하는 요청 및 요청 본문 예시입니다.

PUT https://sheets.googleapis.com/v4/spreadsheets/spreadsheetId/values/Sheet1!A4
{
   "values": [["Elizabeth", "2", "0.5", "60"]]
}

spreadsheet.values.batchUpdate 메서드에서 행 데이터를 업데이트할 수도 있습니다. 여러 행 또는 셀을 업데이트하는 경우 이 메서드를 사용하는 것이 더 효율적입니다.

또한 Sheets API v4에서는 spreadsheets.batchUpdate에서 UpdateCells 또는 RepeatCell 요청을 사용하여 셀 속성과 셀 서식을 수정할 수도 있습니다.

행 삭제

두 API 모두 행 삭제를 지원합니다. 삭제된 행은 스프레드시트에서 제거되고 그 아래 행은 위로 올라갑니다.

v3 API

행을 삭제하려면 먼저 목록 피드에서 삭제할 행을 검색한 다음 해당 행의 항목에 제공된 edit URL로 DELETE 요청을 전송합니다. 행을 업데이트하는 데 사용되는 URL과 동일합니다.

DELETE https://spreadsheets.google.com/feeds/list/spreadsheetId/sheetId/private/full/rowId/version

행을 검색한 이후 다른 클라이언트에 의해 변경된 행을 삭제하지 않도록 하려면, 원본 행의 ETag 값이 포함된 HTTP If-Match 헤더를 포함합니다. 항목 요소의 gd:etag 속성을 검사하여 원본 행의 ETag 값을 확인할 수 있습니다.

행을 검색한 이후 다른 사람이 업데이트했는지 여부에 관계없이 행을 삭제하려면, If-Match: * 를 사용하고 eEtE를 포함하지 마세요. 이 경우 행을 삭제하기 전에 검색할 필요가 없습니다.

v4 API

Sheets API v4에서 행 삭제는 DeleteDimension 요청을 사용하여 spreadsheet.batchUpdate 메서드 호출로 처리됩니다. 이 요청을 사용하여 열을 삭제할 수도 있으며 개발자가 행 또는 열의 일부만 삭제하도록 선택할 수도 있습니다. 예를 들어 다음은 지정된 ID가 있는 시트의 6번째 행을 삭제합니다 (행 색인은 0부터 시작하며 startIndex는 포함하고 endIndex는 제외합니다).

POST https://sheets.googleapis.com/v4/spreadsheets/spreadsheetId:batchUpdate
{
  "requests": [
    {
      "deleteDimension": {
        "range": {
          "sheetId": sheetId,
          "dimension": "ROWS",
          "startIndex": 5,
          "endIndex": 6
        }
      }
    }
  ],
}

spreadsheet.get 메서드를 사용하여 시트의 sheetId를 가져올 수 있습니다.

셀 데이터 검색

Sheets API v3에서는 스프레드시트에 저장된 모든 데이터에 기본적으로 액세스할 수 있는 셀 피드를 제공합니다. 읽기 액세스의 경우 셀 피드는 전체 시트 콘텐츠 또는 쿼리 매개변수 집합으로 정의된 시트의 셀 범위를 제공할 수 있지만 단일 블록으로만 제공됩니다. 분리된 범위는 추가 GET 요청을 사용하여 별도로 검색해야 합니다.

Sheets API v4는 시트에서 모든 셀 데이터 세트 (여러 개의 분리된 범위 포함)를 검색할 수 있습니다. Sheets API v3는 셀 내용을 입력값 (사용자가 키보드에서 입력하는 값) 및/또는 수식의 출력 (숫자인 경우)으로만 반환할 수 있습니다. Sheets API v4에서는 값, 수식, 서식, 하이퍼링크, 데이터 검증, 기타 속성에 대한 전체 액세스 권한을 부여합니다.

v3 API

지정된 워크시트의 셀 기반 피드의 URL을 확인하려면 워크시트 피드를 검사하고 원하는 워크시트 항목에서 셀 피드 URL을 찾습니다.

셀 기반 피드를 검색하려면 적절한 승인 헤더를 사용하여 GET 요청을 셀 피드 URL에 보냅니다. 예를 들면 다음과 같습니다.

GET https://spreadsheets.google.com/feeds/cells/spreadsheetId/sheetId/private/full

셀은 행 및 열 번호를 사용하여 참조됩니다. 단일 특정 범위를 가져오려면 max-row, min-row, max-col, min-col 쿼리 매개변수를 사용하면 됩니다. 예를 들어 다음은 행 2부터 시작하여 열 4 (D)의 모든 셀을 검색합니다.

GET https://spreadsheets.google.com/feeds/cells/spreadsheetId/sheetId/private/full
             ?min-row=2&min-col=4&max-col=4

Sheets API v3는 검색된 셀의 inputValue를 반환합니다. 이 값은 사용자가 셀을 조작하기 위해 Google Sheets 사용자 인터페이스에 입력하는 값입니다. inputValue는 리터럴 값이나 수식일 수 있습니다. 또한 API는 numericValue를 반환하는 경우도 있습니다. 예를 들어 수식에서 숫자가 나오는 경우가 이에 해당합니다. 예를 들어 구조가 다음과 유사한 셀 항목이 응답에 포함될 수 있습니다.

<entry gd:etag='"ImB5CBYSRCp7"'>
  <id>https://spreadsheets.google.com/feeds/cells/spreadsheetId/sheetId/private/full/R9C4</id>
  <updated>2006-11-17T18:27:32.543Z</updated>
  <category scheme="http://schemas.google.com/spreadsheets/2006"
    term="http://schemas.google.com/spreadsheets/2006#cell"/>
  <title type="text">D4</title>
  <content type="text">5</content>
  <link rel="self" type="application/atom+xml"
    href="https://spreadsheets.google.com/feeds/cells/spreadsheetId/sheetId/private/full/R9C4"/>
  <link rel="edit" type="application/atom+xml"
    href="https://spreadsheets.google.com/feeds/cells/spreadsheetId/sheetId/private/full/R9C4/srevc"/>
  <gs:cell row="4" col="4" inputValue="=FLOOR(C4/(B4*60),.0001)"
    numericValue="5.0">5</gs:cell>
</entry>

v4 API

원하는 범위에 대해 spreadsheets.values.get 또는 spreadsheets.values.batchGet 메서드를 각각 호출하여 셀 데이터를 검색합니다. 예를 들어 다음 코드는 행 2부터 시작하여 'Sheet2'의 D열에 있는 셀을 열 주요 순서대로 반환하고 입력된 수식을 반환합니다 (후행 빈 셀은 생략됨).

GET https://sheets.googleapis.com/v4/spreadsheets/spreadsheetId/values/Sheet2!D2:D?majorDimension=COLUMNS&valueRenderOption=FORMULA

이 요청에 대한 응답은 다음과 유사한 구조입니다.

{
  "spreadsheetId": spreadsheetId,
  "valueRanges": [
      {"range": "Sheet2!D2:D",
       "majorDimension": "COLUMNS",
       "values": [["Widget", 234, "=FLOOR(C4/(B4*60),.0001)", "=D4\*1000"]]
      }]
}

여러 범위의 셀 데이터를 검색하려면 spreadsheet.values.batchGet을 사용하는 것이 더 효율적입니다. 형식 지정과 같은 셀 속성에 액세스하려면 spreadsheet.get 메서드가 필요합니다.

셀 수정

Sheets API v3에서는 수정된 셀 항목을 요청 본문으로 사용하여 셀 피드에 PUT 명령어를 실행하여 셀 내용을 수정할 수 있습니다.

반면 Sheets API v4에서는 셀 내용을 변경하는 spreadsheets.values.updatespreadsheets.values.batchUpdate 메서드를 제공합니다.

v3 API

단일 셀의 내용을 수정하려면 먼저 셀 피드에서 셀의 항목을 찾습니다. 항목에는 edit URL이 포함됩니다. 셀에 포함하려는 내용을 반영하도록 항목을 업데이트한 후 업데이트된 셀 항목을 요청 본문으로 사용하여 수정 URL에 대해 PUT 요청을 실행합니다. 예를 들어 다음은 SUM 수식을 포함하도록 셀 D2 (R2C4)를 업데이트합니다.

PUT https://spreadsheets.google.com/feeds/cells/spreadsheetId/sheetId/private/full//R2C4/srevc

<entry xmlns="http://www.w3.org/2005/Atom"
    xmlns:gs="http://schemas.google.com/spreadsheets/2006">
  <id>https://spreadsheets.google.com/feeds/cells/spreadsheetId/sheetId/private/full/R2C4</id>
  <link rel="edit" type="application/atom+xml"
    href="https://spreadsheets.google.com/feeds/cells/spreadsheetId/sheetId/private/full/R2C4"/>
  <gs:cell row="2" col="4" inputValue="=SUM(A1:B6)"/>
</entry>

v4 API

Sheets API v4에서는 spreadsheets.values.update 메서드를 사용하여 단일 셀을 수정할 수 있습니다. 이 메서드에는 ValueInputOption 쿼리 매개변수가 필요합니다. 이 매개변수는 입력 데이터를 Sheets UI에 입력된 것처럼 취급할지 (USER_ENTERED) 파싱하지 않고 그대로 유지하는지 (RAW) 지정합니다. 예를 들어 다음은 셀 D2를 수식으로 업데이트합니다.

PUT https://sheets.googleapis.com/v4/spreadsheets/spreadsheetId/values/D2?valueInputOption=USER_ENTERED
{"values": [["=SUM(A1:B6)"]]}

여러 셀을 수정하는 경우 spreadsheets.values.batchUpdate 메서드를 사용하여 한 번의 요청으로 실행할 수 있습니다.

일괄 요청을 통한 여러 셀 수정

두 API 모두 단일 (일괄) 요청으로 여러 셀의 내용을 변경할 수 있는 방법을 제공합니다. 일괄 요청에 의해 참조되는 셀은 연속된 범위 내에 있지 않아도 됩니다.

일괄 작업에서 셀 편집 중 하나 이상이 실패한 경우 Sheets API v3에서는 다른 셀 수정이 성공할 수 있도록 허용합니다. 그러나 Sheets API v4는 일괄 업데이트가 실패하면 오류를 반환하고 이 경우 어떤 업데이트도 적용하지 않습니다.

v3 API

여러 셀을 수정하려면 먼저 워크시트의 셀 피드를 검색합니다. 항목에는 일괄 URL이 포함됩니다. 업데이트할 셀을 설명하는 요청 본문 및 새 셀 콘텐츠와 함께 POST 요청을 이 URL로 전송합니다. POST 요청 및 요청 본문의 구조는 다음과 유사합니다.

POST https://spreadsheets.google.com/feeds/cells/spreadsheetId/sheetId/private/full/batch
<feed xmlns="http://www.w3.org/2005/Atom"
      xmlns:batch="http://schemas.google.com/gdata/batch"
      xmlns:gs="http://schemas.google.com/spreadsheets/2006">
  <id>https://spreadsheets.google.com/feeds/cells/spreadsheetId/sheetId/private/full</id>
  <entry>
    <batch:id>request1</batch:id>
    <batch:operation type="update"/>
    <id>https://spreadsheets.google.com/feeds/cells/spreadsheetId/sheetId/private/full/R2C4</id>
    <link rel="edit" type="application/atom+xml"
      href="https://spreadsheets.google.com/feeds/cells/spreadsheetId/sheetId/private/full/R2C4/version"/>
    <gs:cell row="2" col="4" inputValue="newData"/>
  </entry>
  ...
  <entry>
    <batch:id>request2</batch:id>
    <batch:operation type="update"/>
    <id>https://spreadsheets.google.com/feeds/cells/spreadsheetId/sheetId/private/full/R2C5</id>
    <link rel="edit" type="application/atom+xml"
      href="https://spreadsheets.google.com/feeds/cells/spreadsheetId/sheetId/private/full/R2C5/version"/>
    <gs:cell row="5" col="2" inputValue="moreInfo"/>
  </entry>
</feed>

batch:id 필드는 배치 내에서 요청을 고유하게 식별해야 합니다. 셀을 수정하려면 batch:operation 입력란이 update여야 합니다. gs:cell는 행과 열 번호로 셀을 식별하고 여기에 삽입할 새 데이터를 제공합니다. id에는 업데이트할 셀의 전체 URL이 포함됩니다. link에는 셀 ID의 전체 경로가 포함된 href 속성이 있어야 합니다. 이러한 입력란은 모두 각 항목에 필수입니다.

v4 API

Sheets API v4에서는 spreadsheets.values.batchUpdate 메서드를 통해 셀 값을 일괄 수정할 수 있습니다.

요청 본문에 지정된 데이터 변경사항과 함께 POST 요청을 실행하여 여러 셀을 수정할 수 있습니다. 예를 들면 다음과 같습니다.

POST https://sheets.googleapis.com/v4/spreadsheets/spreadsheetId/values:batchUpdate
{
  "valueInputOption": "USER_ENTERED"
  "data": [
       {"range": "D4",
        "majorDimension": "ROWS",
        "values": [["newData"]]
       },
       {"range": "B5",
        "majorDimension": "ROWS",
        "values": [["moreInfo"]]
       }
  ]
}

단일 셀을 범위로 지정한 경우 해당 셀부터 시작하여 제공된 모든 값이 시트에 왼쪽 상단 좌표로 작성됩니다. 그 대신 다중 셀 범위를 지정하는 경우에는 제공하는 값이 해당 범위에 정확히 맞아야 합니다. 그렇지 않으면 API가 오류를 반환합니다.