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 は、次のスコープセットの 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 エンドポイントからアクセスできます(適切な認可ヘッダーを使用)。

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 リクエストの本文として編集 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

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

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

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.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 行目を削除します(行番号はゼロベースで、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

セルは行番号と列番号を使用して参照されます。特定の範囲を 1 つ取得するには、max-rowmin-rowmax-colmin-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 スプレッドシートのユーザー インターフェースに入力してセルを操作する値です。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.update メソッドと spreadsheets.values.batchUpdate メソッドが用意されています。

v3 API

1 つのセルのコンテンツを編集するには、まずセルフィードでそのセルのエントリを見つけます。エントリに編集 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 で 1 つのセルを編集するには、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 つの(バッチ)リクエストで複数のセルのコンテンツを変更する手段を提供します。バッチ リクエストで参照されるセルは、連続した範囲に存在する必要はありません。

バッチ内のセルの編集が 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"]]
       }
  ]
}

範囲として 1 つのセルを指定した場合、指定されたすべての値が、そのセルを左上の座標としてシートに書き込まれます。代わりに複数セルの範囲を指定する場合は、指定する値がその範囲に完全に収まるようにする必要があります。収まっていない場合、API はエラーを返します。