スプレッドシート関連のQueryの作り方は2種類存在する
各要素を検索するためのXXXQueryを作るには、com.google.gdata.client.spreadsheetパッケージのXXXQueryクラスのコンストラクタを利用する。このコンストラクタの引数は対応する要素のfeedUrlで、こいつの取得方法は以下の二種類が存在する。今頃になって気付いた。とりあえずメモしておこう。
- com.google.gdata.client.spreadsheet.FeedURLFactoryのgetXXXFeedUrlメソッド(例えばgetWorksheetFeedUrlメソッド)
- 各要素の親となるXXXEntryクラスのgetXXXFeedUrlメソッド(例えばSpreadsheetEntryクラスのgetWorksheetFeedUrlメソッド)
なお、FeedURLFactoryを使った場合、以下の3つのクラスについてはvisibilityとprojectionが指定できる。
- WorksheetQuery
- ListQuery
- CellQuery
visibilityとprojectionも含めたFeedURLFactoryのgetWorksheetFeedUrlメソッドの利用例と解説は以下の感じ(ほんとは例外処理とかも必要)。更新系の記事に入れるのは微妙そうなので没だけど、どこかで使うかもしれないということで残しておこう。
public static WorksheetEntry findWorksheet( SpreadsheetEntry spreadsheetEntry, String title) throws IOException, ServiceException { FeedURLFactory urlFactory = FeedURLFactory.getDefault(); String spreadsheetKey = spreadsheetEntry.getKey(); String visibility = "private"; // private or public String projection = "full"; // full or values or basic WorksheetQuery worksheetQuery = new WorksheetQuery(urlFactory .getWorksheetFeedUrl(spreadsheetKey, visibility, projection)); worksheetQuery.setTitleQuery(title); // 検索対象のワークシート名を指定している。 WorksheetFeed worksheetFeed = spreadsheetEntry.getService().query( worksheetQuery, WorksheetFeed.class); WorksheetEntry worksheetEntry = worksheetFeed.getEntries().get(0); return worksheetEntry; }
ここではWorksheetQueryを生成する際に利用するFeedURLFactoryのgetWorksheetFeedUrlメソッドについて解説します。getWorksheetFeedUrlメソッドの第一引数はスプレッドシートごとに一意となるキーです。キーに関しては前回解説していますのでそちらを参照してください。次に第二引数と第三引数にvisibilityとprojectionを指定します。visibilityはjavaのアクセス修飾子と同じ可視性です。privateとpublicの2種類が存在し、pubicは公開されているワークシートのみが操作対象になります。 privateを指定した場合は全てのワークシートが対象になります。projectionは検索結果の出力フォーマットです。fullと valuesとbasicの3種類存在します。fullはワークシート内の計算式をそのまま取得することが出来ます。valuesとbasicの場合は計算式ではなく計算式の計算結果を取得することが出来ます。ただし、basicの場合は拡張情報(extension elements)が除外されます。拡張情報は検索対象ごとに異なりますのでここでは説明を割愛します。なお、visibilityおよび projectionの詳細についてはVisibility valuesおよびProjection valuesを参照してください。
あと気になるのは、visibilityやprojectionを指定して取得した要素のgetXXXFeedUrlメソッドがvisibilityやprojectionを引き継ぐかどうかという点かな。別の機会にでも調べてみよう。