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 では、使用するスプレッドシートの spreadsheet ID を指定する必要があります。また、操作するシートの ID も必要になります。これらの値は、API エンドポイント URL の一部、クエリ パラメータ、またはリクエスト本文の一部として表示されます。このページのプレースホルダ spreadsheetIdsheetId は、スプレッドシート ID とシート ID をそれぞれ指しています。このページで説明するメソッドを使用するときは、これらのプレースホルダの場所を実際の ID に置き換えてください。

また、v3 API は、リストフィードを使用して取得された行に ID を割り当てます。このページでは、この ID は rowId プレースホルダによって表されます。

リクエストの承認

アプリを実行すると、ユーザーは特定のパーミッションを付与するように求められます。アプリケーションで指定するスコープにより、求められるパーミッションが決まります。

v3 API

Sheets API v3 は、次の単一の承認スコープで動作します。

https://spreadsheets.google.com/feeds

これは、次のスコープのエイリアスです。

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

どちらのスコープ形式も使用できます。

v4 API

Sheets API v4 は、次のスコープのセットを 1 つ以上使用します。

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 で使用できるプロジェクション設定は 2 つだけです。full プロジェクションは利用可能なすべての情報を返し、basic はより小さな固定データ サブセット(ワークシート、リスト、セルのフィード用の)を返します。可視性と同様に、プロジェクションは、API エンドポイントで(可視性の設定の後に)指定する必要があります。

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

basic プロジェクションによって提供される小さなデータ サブセットはコードの効率を高めるために有用ですが、カスタマイズすることはできません。

v4 API

Sheets API v4 は完全なデータセットを返すことができますが、Sheets API v3 の basic 可視性設定と同様の固定サブセットは定義していません。spreadsheet コレクションのメソッドでは、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 Picker と組み合わせて 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 メソッドを使用してユーザーのすべてのスプレッドシートを一覧表示するには、制限付きスコープが必要です。

シート メタデータを取得する

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 が提供する 2 つのメソッドのうちの 1 つです(もう 1 つはセルフィードです)。行フィードは、一般的なスプレッドシート操作(行ごとの読み取り、行の追加、並べ替えなど)をサポートすることを目的としていますが、特定の仮定に基づいているため、一部のタスクには適していません。特に、リストフィードでは、行が空の場合はフィードが停止するほか、シートの先頭行にヘッダーが必要になります。

一方、Sheets API v4 では、行固有のアクセス メソッドを使用しません。代わりに、A1 表記を使用して必要な特定の範囲を参照することにより、シートのセルデータにアクセスします。範囲には、セルのブロック、行全体、列全体、またはシート全体を指定できます。API は連続していないセルにアクセスすることもできます。

v3 API

指定したワークシートのリストベース フィードの URL を特定するには、ワークシート フィードを取得してから、目的のワークシート エントリでリストフィード URL を見つけます。

リストベースのフィードを取得するには、適切な承認ヘッダーを使用して、リストフィード URL に GET リクエストを送信します。次に例を示します。

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

このリクエストのレスポンスには、特に、特定の行に対応するエントリが含まれています。個々のセルは、シートのヘッダー行(必須)にある名前によって参照されます。たとえば、次の例は 1 行のエントリを示しています。

<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 を特定するには、ワークシート フィードを取得してから、目的のワークシート エントリで POST 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」にある最後の表の下に、新しいデータを 1 行書き込みます。

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

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

また、Sheets API v4 では、spreadsheets.batchUpdateAppendCells リクエストを使用して、特定のプロパティと表示形式が設定されたセルを追加することもできます。

新しいデータを使った行の編集

どちらの 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」の 4 行目に追加します。

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 を使用しても、行を削除できます。削除した行はスプレッドシートから取り除かれ、削除した行の下にある行が 1 行上に移動します。

v3 API

行を削除するには、まず削除する行をリストフィードから取得してから、行のエントリで指定されている edit URL に DELETE リクエストを送信します。この 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 行目を削除します(行インデックスはゼロベースであり、startIndex と endIndex が含まれます)。

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

シートの sheetId は、spreadsheet.get メソッドを使用して取得できます。

セルデータの取得

Sheets API v3 のセルフィードを使用すると、スプレッドシートに格納されているすべてのデータへの基本的なアクセスが可能です。読み取りアクセスの場合、セルフィードは、シート全体のコンテンツか、一連のクエリ パラメータで定義されたシートのセル範囲を提供しますが、単一のブロックとしてのみ提供できます。連続していない範囲については、追加の GET リクエストを使用して、別々に取得する必要があります。

Sheets API v4 は、シートからセルデータの任意のセット(複数の連続していない範囲を含む)を取得できます。Sheets API v3 は、セルのコンテンツを入力値(ユーザーがキーボードで入力する値など)や式の出力(数値の場合)としてのみ返すことができます。Sheets API v4 は、値、式、表示形式、ハイパーリンク、データ検証、その他のプロパティへのフルアクセスを付与します。

v3 API

任意のワークシートのセルベース フィードの URL を特定するには、ワークシート フィードを調べて、目的のワークシート エントリでセルフィード URL を見つけます。

セルベース フィードを取得するには、適切な承認ヘッダーを使用して、セルフィード URL に GET リクエストを送信します。次に例を示します。

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

セルは、行番号および列番号を使用して参照されます。max-rowmin-rowmax-colmin-col クエリ パラメータを使用すると、単一の特定の範囲をフェッチできます。たとえば、次のリクエストは列 4(D)の行 2 から始まるすべてのセルを取得します。

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 スプレッドシートのユーザー インターフェースに入力する値です。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

目的の 1 つ以上の範囲に対して spreadsheets.values.get メソッドまたは spreadsheets.values.batchGet メソッドをそれぞれ呼び出すことにより、セルデータを取得します。たとえば、次のリクエストは、"Sheet2" の列 D の 2 行目以降のセルを返します。列方向に処理され、入力されている式はそのまま返されます(末尾の空のセルは省略されます)。

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.update メソッドと spreadsheets.values.batchUpdate メソッドを提供します。

v3 API

単一のセルのコンテンツを編集するには、まずセルフィードでセルのエントリを見つけます。このエントリには edit URL が含まれています。エントリを更新してセルにコンテンツを反映してから、更新済みのセルエントリをリクエスト本文に指定して、edit URL に PUT リクエストを発行します。たとえば、次の例は、セル D2(R2C4)をアップデートして、SUM 式が含まれるようにします。

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 メソッドで実行できます。このメソッドでは、スプレッドシート UI に入力された場合と同様に入力データを処理するか(USER_ENTERED)、解析せずにそのまま取得するか(RAW)どうかを指定する ValueInputOption クエリ パラメータが必要です。たとえば、次の例は、式が含まれているセル D2 を更新します。

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

複数のセルを編集する場合は、spreadsheets.values.batchUpdate メソッドを使用して、1 つのリクエストで編集コマンドを発行します。

バッチ リクエストを使った複数のセルの編集

どちらの API を使用しても、単一の(バッチ)リクエストで複数のセルのコンテンツを変更できます。バッチ リクエストで参照されるセルは、連続した範囲に存在する必要はありません。

バッチ リクエストで 1 つ以上のセル編集が失敗しても、Sheets API v3 では、他のセルの編集に成功します。ただし、Sheets API v4 では、バッチ リクエストによるいずれかのアップデートが失敗した場合、エラーが返され、すべてのアップデートが適用されません。

v3 API

複数のセルを編集するには、まずワークシートのセルフィードを取得します。エントリにはバッチ URL が含まれています。アップデートするセルと新しいセル コンテンツを記述したリクエスト本文とともに、この URL に POST リクエストを送信します。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 はエラーを返します。