Sheets API v3 からの移行

Google Sheets API v3 に基づく既存のアプリがある場合は、Google Sheets API v4 に移行できます。v4 バージョンは JSON ベースで、使いやすいインターフェースを備え、v3 バージョンでは実現できない多くの機能が追加されています。

このページでは、古い Sheets API v3 のコマンドと、Sheets API v4 の同等のオペレーションとのマッピングについて説明します。このマッピングは、主に spreadsheets.values コレクションに重点を置いています。このコレクションは、セルの読み取りと書き込みの機能を直接提供します。シートの追加やシートのプロパティの更新などのその他の側面は、スプレッドシート コレクションによって処理されます。v4 API の JSON 構造は、v3 で使用されている XML 構造と下位互換性がないことに注意してください。

スプレッドシート 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 では、次のスコープのセットの 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

アプリでユーザーのシートやシートのプロパティを編集する必要がない場合は、読み取り専用のスコープを使用します。アプリケーションで一般的なドライブ アクセスが必要ない場合は、ドライブ スコープではなくスプレッドシート スコープを使用します。

公開設定

古いバージョンの 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 エンドポイントからアクセスできます(適切な Authorization ヘッダーを使用)。

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 が含まれています。ワークシートのメタデータを更新し、編集 URL への PUT リクエストの本文として送信します。次に例を示します。

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

このリクエストに対するレスポンスには、特定の行に対応するエントリなどが含まれます。個々のセルは、(必須の)シートのヘッダー行で指定された名前で参照されます。たとえば、単一行のエントリは次のようになります。

<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>

デフォルトでは、リストフィードで返される行は行順で返されます。スプレッドシート API v3 には、その順序を変更するためのクエリ パラメータが用意されています。

Reverse order:

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 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.batchUpdateAppendCells リクエストを使用して、特定のプロパティと形式のセルを追加することもできます。

新しいデータで行を編集する

どちらの API でも、行データを新しい値で更新できます。

v3 API

データ行を編集するには、リストフィードを調べて、更新する行のエントリを見つけます。必要に応じて、そのエントリの内容を更新します。使用するエントリの ID 値が、既存のエントリの ID と完全に一致していることを確認してください。

エントリが更新されたら、適切な認証ヘッダーを使用して、その行エントリで指定された edit URL に、エントリをリクエストの本文として含む PUT リクエストを送信します。次に例を示します。

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

スプレッドシート 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.batchUpdateUpdateCells リクエストまたは RepeatCell リクエストを使用して、セルのプロパティとセルの形式設定を編集することもできます。

行を削除する

どちらの API も行の削除をサポートしています。削除された行はスプレッドシートから削除され、その下の行が 1 つ上に移動します。

v3 API

行を削除するには、まず リスト フィードから削除する行を取得し、次にその行のエントリで指定された edit URL に DELETE リクエストを送信します。これは、行の更新に使用される URL と同じです。

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

取得後に別のクライアントによって変更された行を削除しないようにするには、元の行の ETag 値を含む HTTP If-Match ヘッダーを含めます。元の行の ETag 値は、エントリ要素の gd: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
        }
      }
    }
  ],
}

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

セルデータを取得する

Sheets API v3 は、スプレッドシートに保存されているすべてのデータに基本的なアクセスを提供するセルフィードを提供します。読み取りアクセスの場合、セルフィードはシートのコンテンツ全体、または一連のクエリ パラメータで定義されたシートのセル範囲を提供できますが、1 つのブロックとしてのみ提供できます。不連続な範囲は、追加の 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 クエリ パラメータを使用すると、特定の範囲を 1 つ取得できます。たとえば、次の例では、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 スプレッドシートのユーザー インターフェースでセルを操作するために手動で入力する値です。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 メソッドを呼び出して、セルデータを取得します。たとえば、次の関数は、「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

単一のセルのコンテンツを編集するには、まずセルフィードでセルのエントリを見つけます。エントリに編集 URL が含まれています。セルに含める内容を反映するようにエントリを更新し、更新されたセルエントリをリクエストの本文として、編集 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 メソッドで行うことができます。このメソッドには ValueInputOption クエリ パラメータが必要です。このパラメータは、入力データをスプレッドシートの 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 メソッドを使用して、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 はエラーを返します。