SeleniumとGoogle Spreadsheets(6) 「GoogleSpreadSheetの読み書き編」

SeleniumとGoogle Spreadsheets(6) 「GoogleSpreadSheetの読み書き編」

ソフトバンク・au・ドコモの方は、公式のオンラインショップを利用すれば頭金不要で通常のショップよりお得に購入できます。

どうも、さむらいですな。
この記事いつまで続くんだろう・・・。

ということで、前回ではGoogleSpreadSheetを利用するための認証処理を書きました。今回はその後実際にスプレッドシートを読み書きするサンプルをご紹介します。

前回までのソースを修正

前回までのソースコードの以下を書きなおしました。

    //アプリケーション名
    String applicationName = "testSelenium";

    //GoogleSpreadSheetのデータを操作するAPIのURL
    String feedturl = "http://spreadsheets.google.com/feeds/spreadsheets/";

    String spreadsheetkey = "スプレッドシート特定のためのキー";
    String username = "ログインユーザアカウント";
    String password = "ログインパスワード";

SpreadsheetService service = new SpreadsheetService(applicationName);
service.setUserCredentials(username, password);

SpreadsheetEntry spreadsheetEntry = service.getEntry(new URL(feedturl + spreadsheetkey), SpreadsheetEntry.class);
WorksheetEntry worksheet = spreadsheetEntry.getDefaultWorksheet();

ここまでのおまじないで、スプレッドシート全体および、デフォルトのワークシートにアクセスする準備が整いました。
お気づきの方もいるかも知れませんが、ここではなんとChrome Driverを使っていません。

今までのはなんだったの・・・と肩を落とさずに次へ進みましょう。そのうちまたChrome Driverが出てきますので。

※ここまででまた新しいクラスが使われていますので、随時Eclipseの補完機能でimportしていってください。

セル情報を取得しよう

ワークシートにアクセスできるようになったら、次は個別のセル単位でデータを読み出します。上のソース内の //..続くよ..// の後に以下のソースを記述します。

//セルを取得するためのクエリクラス
CellQuery cellQuery = new CellQuery(worksheet.getCellFeedUrl());

//取得する範囲を指定ここでは K1 セルを取得します。
cellQuery.setRange("K1");

//K1が空でもいいから実行してね、と宣言
cellQuery.setReturnEmpty(true);

//セルの内容を文字列として、k1String という文字列変数に入れます。
//getEntriesの戻り値はリスト型なので、その中の最初のデータを取得します。
String k1String = service.query(cellQuery, CellFeed.class).getEntries().get(0).getPlainTextContent();   


 これでシートから文字列取ったどー!でも作ったシートに何も入力してなければ、戻り値は空文字なので、予めK1セルに何か文字を入れておいてもいいかも知れません。この後K1セルに文字を入力するサンプルも記述しますぞ。

セルにデータを書き込む

読み出しは成功しましたか?例外は発生してませんか?
うまく行っていれば、次は指定のセルへのデータ入力を実施しましょう。

以下のソースを、上のサンプルの最後に書きます。

//K1セルへの参照セット
CellEntry k1Cell = service.query(cellQuery, CellFeed.class).getEntries().get(0);

//k1Cellの内容を書き込み
k1Cell.changeInputValueLocal(“やっほー!”);

//書き込み内容を確定
k1Cell.update();

ここまでの処理を実行すると、

1.GoogleSpreadSheet にアクセスし、認証
2.デフォルトワークシートの、K1セルのデータの読み込み
3.デフォルトワークシートの、K1セルのデータの書き込み

ができるようになりました。

最終ソースはimport宣言も含めて以下の形になります。

package testSelenium;

import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;

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;
import com.google.gdata.util.ServiceException;

public class UseDriver {

public static void main(String[] args) throws MalformedURLException, IOException, ServiceException {
    // TODO 自動生成されたメソッド・スタブ

    //アプリケーション名
    String applicationName = "testSelenium";

    //GoogleSpreadSheetのデータを操作するAPIのURL
    String feedturl = "http://spreadsheets.google.com/feeds/spreadsheets/";

    String spreadsheetkey = "シートを特定するパラメータ";
    String username = "ログインユーザアカウント";
    String password = "ログインパスワード";

    //GDataAPIを使うための認証処理
    SpreadsheetService service = new SpreadsheetService(applicationName);
    service.setUserCredentials(username, password);

    //ワークシートの取得
    SpreadsheetEntry spreadsheetEntry = service.getEntry(new URL(feedturl + spreadsheetkey), SpreadsheetEntry.class);
    WorksheetEntry worksheet = spreadsheetEntry.getDefaultWorksheet();

    //セルを取得するためのクエリ
    CellQuery cellQuery = new CellQuery(worksheet.getCellFeedUrl());

    //取得する範囲を指定。ここでは K1 セルの取得を宣言。
    cellQuery.setRange("K1");

    //K1 セルの内容が空でもいいから実行してね、と宣言
    cellQuery.setReturnEmpty(true);

    //セルの内容を文字列として、k1String という文字列変数に入れる。
    //getEntriesの戻り値はリスト型なので、その中の最初のデータを取得します。
    String k1String = service.query(cellQuery, CellFeed.class).getEntries().get(0).getPlainTextContent();

    //取得した内容をログに出力
    System.out.println("K1の内容:"+k1String);

    //K1セルへの参照をセット
    CellEntry k1Cell = service.query(cellQuery, CellFeed.class).getEntries().get(0);

    //k1Cellの内容を変更
    k1Cell.changeInputValueLocal("やっほー!");

    //変更内容を確定
    k1Cell.update();

}
}</code>

ちなみにChrome等でワークシートを開いたまま上記を実行すると、K1セルが書き換わるのがほとんどリアルタイムで確認できるはずです。面白いので試してみてください。

ここまでの処理が上手くいけばあとは、Selenium と SpreadSheet の組み合わせ次第でいくらでも夢が広がりますね。

GoogleSpreadSheet を外部設定ファイルとして使うことによって、Webフォームからシートにデータを登録できるようにしておいて、 Selenium からはその内容を読み込んで動かすようにしておけば、都度プログラムを修正する必要もなく、Selenium の挙動を変更することも可能になります。

記述ルールさえ決めておけば、Javaプログラムが書けない人でもプログラムを実行させることができるようになるし、シートを更新の度にコピーしてバックアップする等をしておけば、過去どういった処理を行ったかも残せるようになります。

プログラムを都度書き直したりする必要がなくなるだけでも、工数がだいぶ削減できると思いますので、ぜひともトライしてみてください。

※ショーケース・ティービーではすでに設定シートを読み込んでその通りに Selenium を動かす、という処理を行なっています。今のところまだ、修正したプログラムが既存の動作に影響を与えてないよね、というチェックでの用途でしか使っていませんが。

ということで、このシリーズはここまで!お付き合い頂きありがとうございました〜。
変なところがあったら、、、頑張って直してください(笑)

次回の記事ではこのスプレッドシートのデータを取得したり更新したりするときに苦労した話を書こうかな。

ということでまた!

ソフトバンク・au・ドコモの方は、公式のオンラインショップを利用すれば頭金不要で通常のショップよりお得に購入できます。

【週刊bitWave】(メルマガ)始めました!

登録はこちらからメールアドレスを入力してお申込みください。

ご登録いただいたメールアドレスは 【週刊bitWave】の更新情報の配信にのみ使用します。

個人情報の取扱いに関しては、「プライバシーポリシー」をご確認ください。解除はいつでもこちらから行うことが可能です。

あなたにおすすめ