SaaS形式のさまざまなGoogle Appsを操作するGData APIの1つ、Googleスプレッドシートを操作するSpreadsheets Data APIのJavaライブラリの使い方を基本から紹介する入門連載(編集部)
前回の「APIでGoogleスプレッドシートの追加/更新/削除」では、ワークシートと行単位でのデータの操作方法について紹介しました。今回は、以下について紹介します。
本稿で使うサンプルは、こちらからダウンロードできます。読み進める前にダウンロードして自身の環境に設定しておいてください。
前回紹介したワークシートや行の場合には、追加/更新/削除の3通りの操作がありましたが、セル単位で操作する場合は更新のみの操作です。セルの値を変更する際は「CellEntryクラスのupdateメソッド(HTTPのPUT)のみを利用して、POSTやDELETEは利用しないようにすべき」と、「Changing contents of a cell」の「Note」に記述されています。
PUT、POST、DELETEはHTTPプロトコルのメソッドです。gdata-java-clientはHTTPリクエストを隠ぺいするため、普段は意識しませんが、PUTはCellEntryクラスのupdateメソッドに、POSTはSpreadsheetServiceクラスのinsertメソッドに、DELETEはCellEntryクラスのdeleteメソッドに対応しています。
では、実際にセルの値を更新してみましょう。「セル単位でのデータ操作」という名前のスプレッドシート作ってください。
このスプレッドシートにAPIを使って、以下のようにA1セルからA3セルの値を更新します。
実際に追加してみましょう。サンプルのCellUpdate.javaとSpreadsheetUtil.javaをコピーしてください。SpreadsheetUtil.javaはサンプル用に作成したユーティリティクラスです。この中にSpreadsheetサービスに対する認証処理を記述しているため、getSpreadsheetServiceメソッド内のusernameとpassword変数に自分のメールアドレスとパスワードを設定してください。
設定が終わったら、CellUpdate.java実行してください。セルの値が更新されていると思います。
package sample3;
import com.google.gdata.client.spreadsheet.CellQuery;
import com.google.gdata.client.spreadsheet.SpreadsheetService;
import com.google.gdata.data.spreadsheet.CellEntry;
import com.google.gdata.data.spreadsheet.CellFeed;
import com.google.gdata.data.spreadsheet.SpreadsheetEntry;
import com.google.gdata.data.spreadsheet.WorksheetEntry;
public class CellUpdate {
public static void main(String[] args) throws Exception {
// 操作対象のワークシートを取得する。
SpreadsheetService service = SpreadsheetUtil.getSpreadsheetService();
SpreadsheetEntry spreadsheetEntry = SpreadsheetUtil.findSpreadsheet(
service, "セル単位でのデータ操作");
WorksheetEntry worksheetEntry = spreadsheetEntry.getDefaultWorksheet();
// 更新対象のセルを取得
CellQuery cellQuery = new CellQuery(worksheetEntry.getCellFeedUrl());
cellQuery.setRange("A1:C1");
cellQuery.setReturnEmpty(true); // 空セルも返すようにする
CellFeed cellFeed = service.query(cellQuery, CellFeed.class);
// 更新
CellEntry cellEntry;
// A1
cellEntry = cellFeed.getEntries().get(0);
System.out.println(cellEntry.getTitle().getPlainText());
cellEntry.changeInputValueLocal("3");
cellEntry.update();
// B1
cellEntry = cellFeed.getEntries().get(1);
System.out.println(cellEntry.getTitle().getPlainText());
cellEntry.changeInputValueLocal("4");
cellEntry.update();
// C1
cellEntry = cellFeed.getEntries().get(2);
System.out.println(cellEntry.getTitle().getPlainText());
cellEntry.changeInputValueLocal("=SUM(A1,B1)");
cellEntry.update();
System.out.println("セルの更新が完了しました。");
}
}
セルの更新処理の手順は、まず操作対象のワークシートを取得し、ワークシートからCellQueryを利用して更新対象のCellEntryのインスタンスを取得します。後は、取得したCellEntryのインスタンスに対してchangeInputValueLocalメソッドで値を設定し、updateメソッドを呼ぶことでセルの値を更新できます。値には、C1セルのように数式も指定できます。
CellQueryの利用方法としては、CellUpdate.javaではsetRangeメソッドで検索範囲を指定し、setReturnEmptyメソッドで値が空のセルも取得するようにしています。setRangeメソッドは検索範囲を指定するメソッドでA1参照形式とR1C1参照形式のどちらでも指定可能です。setReturnEmptyメソッドは値が空のセルも取得対象とするかどうかを指定するメソッドです。デフォルトは「false」となっているため、今回のように値が空のセルを更新する場合は「true」を指定する必要があります。
CellQueryに指定可能なオプションについては、「Cell-feed query parameters」を参照してください。
CellEntryを利用することで数式を設定できますが、フォントや色、けい線の設定はできません。「Issue 37: Formatting, Styles and Sorting through the API」に2007年から要望が出されており、今年度中に実装される予定です。
「Changing contents of a cell」において「セルの追加や削除時にSpreadsheetServiceクラスのinsertメソッド(POST)やCellEntryのdeleteメソッド(DELETE)を使うべきではない」と記述がありますが、実は、実際にinsertメソッドやdeleteメソッドを実行すると、セルの値を更新できます。
とはいえ非推奨であるため、将来的に利用できなくなることも考えられます。そのためCellEntryのupdateメソッド(PUT)を利用するようにしましょう。
Copyright © ITmedia, Inc. All Rights Reserved.