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를 나타냅니다. 이 페이지에 설명된 메서드를 사용할 때 이 위치의 실제 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 공개 상태 설정과 유사한 고정된 하위 집합을 정의하지는 않습니다. 스프레드시트 컬렉션의 메서드는 필드 쿼리 매개변수를 사용하여 반환하는 데이터 양을 제한합니다.

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

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는 이 특정 작업을 제공하지 않습니다. Drive.file 범위를 스프레드시트 선택용 Google 선택 도구와 함께 사용하도록 앱을 이전하는 것이 좋습니다.

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

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

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

시트 메타데이터 가져오기

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을 찾습니다.

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

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

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

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

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

행을 검색한 이후 누군가가 행을 업데이트했는지와 관계없이 행을 삭제하려면 if-Match: * 를 사용하고 ETag는 포함하지 않습니다. 이 경우 행을 삭제하기 전에 검색할 필요가 없습니다.

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이 포함됩니다. 셀에 포함할 내용을 반영하도록 항목을 업데이트한 후 업데이트된 셀 항목을 요청 본문으로 하여 edit 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에서 오류를 반환합니다.