検索
連載

GData APIでGoogleスプレッドシートを参照するにはSpreadsheets Data APIを使うための基礎知識(1)(3/3 ページ)

SaaS形式のさまざまなGoogle Appsを操作するGData APIの1つ、Googleスプレッドシートを操作するSpreadsheets Data APIのJavaライブラリの使い方を基本から紹介する入門連載(編集部)

PC用表示 関連情報
Share
Tweet
LINE
Hatena
前のページへ |       

検索対象のスプレッドシートの取得

        // 検索対象のスプレッドシートを取得
        FeedURLFactory urlFactory = FeedURLFactory.getDefault();
        SpreadsheetQuery spreadsheetQuery = new SpreadsheetQuery(urlFactory
                .getSpreadsheetsFeedUrl());
        spreadsheetQuery.setTitleQuery("検索データ"); // 検索対象のスプレッドシート名を指定している
        SpreadsheetFeed spreadsheetFeed = service.query(spreadsheetQuery,
                SpreadsheetFeed.class);
        SpreadsheetEntry spreadsheetEntry = spreadsheetFeed.getEntries().get(0);
        System.out.println("名前:" + spreadsheetEntry.getTitle().getPlainText());

 スプレッドシートに対して検索を行うためには、検索対象のスプレッドシートに対応するSpreadsheetEntryインスタンスを取得する必要があります。そこで「検索データ」というスプレッドシートの名前を使って、Spreadsheetサービスに対して検索を行い、「検索データ」スプレッドシートに対応するSpreadsheetEntryを取得しています。

 スプレッドシートの名前による検索を行うには、SpreadsheetQueryとSpreadsheetService、SpreadsheetFeedの3つのインスタンスが必要です。

  • SpreadsheetQuery
    HTTPリクエストの検索パラメータを表すクラス。setTitleQueryメソッドにスプレッドシートの名前を指定することで、その名前による検索パラメータ文字列を生成
  • SpreadsheetService
    検索クエリ(HTTPリクエスト)を発行
  • SpreadsheetFeed
    検索結果のHTTPレスポンスに対応するクラス

 検索結果は1件とは限らないため、getEntriesメソッドの戻り値は、List型となっています。

 なおFeedURLFactoryは、Spreadsheets Data API関連のURLを生成するユーティリティクラスです。

スプレッドシートのkey(ID)を利用する

 SpreadsheetEntryを取得する方法は、今回のようにスプレッドシートの名前を利用する方法のほかにも、スプレッドシートのkey(ID)を利用する方法があります。「検索データ」スプレッドシートのkeyは、Webブラウザのアドレスバーに表示されるURLのkeyパラメータの値です。よって、「検索データ」スプレッドシートのkeyは「0AvZ3QlJ_lblRdFpDSFF0NkkzdDg2X1FyUnM0MFFybmc」です。

 このkeyを利用してSpreadsheetEntryを取得するコードは、以下の通りです。スプレッドシートの取得処理を、以下の内容に置き換えても動きます。なお、URLクラスはJava標準のjava.net.URLクラスのことです。

         // keyを利用してスプレッドシートを取得
        String key = "0AvZ3QlJ_lblRdFpDSFF0NkkzdDg2X1FyUnM0MFFybmc";
        URL entryUrl = new URL("http://spreadsheets.google.com/feeds/spreadsheets/" + key);
        SpreadsheetEntry spreadsheetEntry = service.getEntry(entryUrl, SpreadsheetEntry.class);

 また、上記のようなSpreadsheets Data APIのURLのフォーマットについては「Reference Guide - Google Spreadsheets APIs and Tools - Google Code」を参照してください。

注意!「スプレッドシートの名前を一意に」

 最後に、スプレッドシートの名前による検索を利用する際の注意点としては、「スプレッドシートの名前を一意にする」という点が挙げられます。これは、Googleドキュメントでは同じ名前のドキュメントを複数作成できるためです。そのため、同じ名前のスプレッドシートが複数存在した場合、名前による検索では意図しないスプレッドシートを取得してしまう可能性があります。

検索対象のワークシートの取得

        // 検索対象のワークシートを取得
        WorksheetEntry worksheetEntry = spreadsheetEntry.getDefaultWorksheet();

 検索は、ワークシート単位で行います。そのため、検索対象となるワークシートに対応するWorksheetEntryを取得する必要があります。ワークシートの取得方法は、スプレッドシートの取得方法と同様に、名前やIDを利用する方法がありますが、そのほかにもデフォルトのワークシートを取得する方法があります。

 今回は、検索対象となるスプレッドシートにワークシートが1つしか存在しないため、SpreadsheetEntryのgetDefaultWorksheetメソッドを利用してWorksheetEntryを取得しています。

 なおSpreadsheetEntry自身は、ワークシートに関する情報を持っていないため、getDefaultWorksheetメソッド内でHTTPリクエストを発行し、Spreadsheetsサービスからスプレッドシートの情報を取得しています。

クエリでワークシート内の検索

        // ワークシート内を検索
        ListQuery listQuery = new ListQuery(worksheetEntry.getListFeedUrl());
        listQuery.setSpreadsheetQuery("名称 = りんご");
        ListFeed listFeed = service.query(listQuery, ListFeed.class);
        ListEntry listEntry = listFeed.getEntries().get(0);
        CustomElementCollection elements = listEntry.getCustomElements();
        System.out.println("名称:" + elements.getValue("名称"));
        System.out.println("数量:" + elements.getValue("数量"));
        System.out.println("価格:" + elements.getValue("価格"));

 WorksheetEntryを取得できれば、後はSpreadsheetEntryを取得したときと同様の手順になります。

 ListQueryを利用して検索パラメータを構築し、SpreadsheetServiceのqueryメソッドで検索クエリを発行し、ListFeed型で検索結果を受け取ります。ListFeedから取得できるListEntryは、ワークシート上の各行に対応するクラスです。getCustomElementsメソッドでCustomElementCollectionを取得し、そのオブジェクトのgetValueメソッドを利用することで、各行のカラム名に対応する値を取得できます。

クエリで使える演算子

 ListQueryのsetSpreadsheetQueryメソッドにおいて指定可能な演算子は、以下の通りです。なお、値はURLエンコードが必要ですが、エンコード処理は各Queryクラスが内部的に行ってくれるため、利用者側でのエンコード処理は不要です。

  • 比較演算子
    = もしくは == 、<> もしくは != 、< 、<= 、> 、>=
  • 論理演算子
    and もしくは && 、 or もしくは ||

 例えば、setSpreadsheetQueryメソッドの中身を以下のように変更することで、りんごではなくバナナの行を取得できます。ちなみに、カラム名は比較演算子の左辺に記述してください。右辺にカラム名を書くと、com.google.gdata.util.InvalidEntryExceptionがthrowされます。

        listQuery.setSpreadsheetQuery("数量 = 1 and 価格 

スプレッドシートを検索/参照する際の3つのポイント

 いかがだったでしょうか。GData APIによるスプレッドシートの操作方法について、イメージをつかんでいただけたでしょうか。今回のポイントは、以下の3点です。

  1. スプレッドシートを検索する際は、ワークシート単位となる。そのため、まずは検索対象のWorksheetEntryを取得する必要がある
  2. GData API経由で操作するスプレッドシート名は、一意となるようにした方が無難。もしくは、スプレッドシートのkeyを利用して操作する
  3. スプレッドシート、ワークシート、検索のそれぞれでSpreadsheetsサービスに対して、HTTPリクエストを投げているが、クライアントライブラリを利用すると、HTTPリクエストを意識せずに操作できる

 次回は、スプレッドシートの更新処理を紹介します。


@IT関連記事

XMLを取り込んだ最新Officeフォーマットとは
「Office 2007」よりファイル形式として使われている「Office Open XML」ファイルフォーマットについて、その成り立ちやOpenOfficeとの比較、標準化の流れ、仕様の概要、Excelを例にJavaでOfficeファイルのデータを操作する方法を紹介する特集企画
Java Solution」フォーラム

Eclipse BIRTとスプレッドシートでBIレポーティング
帳票ベンダ・インタビュー(17) Eclipseのレポート生成エンジンであるBIRTやExcel互換のスプレッドシートデータなどを使った製品はデータ分析業務の“壁”を崩せるのか?
リッチクライアント & 帳票」フォーラム 2007/8/21

Curlによるオブジェクト指向開発と強力な標準クラス
Curlで始めるリッチクライアント(2) オブジェクト指向でコンポーネントの再利用化を実現。さらにRecordSetクラスを使って、Excel相当のスプレッドシートを表現してみよう
Web Client & Report」フォーラム 2005/6/17

Delphi for PHPでExcel帳票を作ろう
Delphi for PHPを使い倒す!(後編) PHPExcelを使ってExcel帳票を出力させる。また、オブジェクトのシリアライズについても触れる
Coding Edge」フォーラム 2009/11/25

Copyright © ITmedia, Inc. All Rights Reserved.

前のページへ |       
ページトップに戻る