ワークシートのID取得
スプレッドシートのキーを取得したら、今度はスプレッドシート内のワークシートのキーを取得します。
これも汎用的な処理ですので自作関数を用意しました。引数には対象のスプレッドシートのキーとワークシート名を与えます。
// 関数:ワークシートのキー検索
function getWorksheetKey($service, $spreadsheetKey, $worksheetname){
// クエリの作成
$query = new Zend_Gdata_Spreadsheets_DocumentQuery();①
$query->setSpreadsheetKey($spreadsheetKey);
// ワークシートフィードの取得
$feed = $service->getWorksheetFeed($query);②
// ワークシートの検索
$i = 0;
foreach($feed->entries as $entry) {③
$worksheetId = split('/', $feed->entries[$i]->id->text);④
if(strcmp($entry->title->text, $worksheetname)==0){⑤
$returnKey = $worksheetId[8];
}
$i++;
}
return $returnKey;
}
1. Zend_Gdata_Spreadsheets_DocumentQueryの生成
ワークシートを取得するためには、Zend_Gdata_Spreadsheets_DocumentQueryというクエリオブジェクトに対象のスプレッドシートのキーを与える必要があります。
$query->setSpreadsheetKey($dbKey);
2. フィードの取得
先ほどのクエリオブジェクトを引数としてgetWorksheetFeedメソッドで、対象のスプレッドシートのワークシート一覧のフィードを取得します。
3. エントリーの取得
スプレッドシートのフィード取得時同様、エントリーを取得します。このエントリー1つがワークシートを表します。
4. ワークシートのキー取得
スプレッドシートのエントリー取得時同様の処理方法で、ワークシートのキーを取得します。「$feed->entries[$i]->id->text」は以下の文字列を表しています。
http://spreadsheets.google.com/feeds/worksheets/【各スプレッドシート固有のキー】/private/full/【ワークシートを表すキー】
5. 対象のワークシートを取得
引数で与えられた$worksheetnameと一致するものワークシートのエントリを検索します。今回利用するワークシートは「制御データ」と「注文一覧」、「明細」という名前が付けられています。「$entry->title->text」はワークシートの名前を表すので、それと一致するもののワークシートのキーを取得します。
注文データ数の確認
今回のデータベース用のスプレッドシートの内容は次のようになっています。


制御データの「注文数」の数字は、注文一覧の注文番号を確定させるために、注文一覧のA列の最大値を表しています。実際の数式としては「=MAX(注文一覧!A:A)」となっています。
この数値をPHPアプリケーションで取得するためのコードが以下になります。
// 注文データ数の確認
$query = new Zend_Gdata_Spreadsheets_ListQuery();
$query->setSpreadsheetKey($dbKey);
$query->setWorksheetId($controlSheetId);①
$listFeed = $serviceSpread->getListFeed($query);
$entry = $listFeed->entries[0]->getCustomByName('注文数');③
$orderNum = $entry->getText();
1. クエリオブジェクトのパラメータ設定
先ほどワークシートを取得する際にも使用しましたが、さらにワークシートを表すキーを引数として与えて、リストフィードを取得します。このリストフィードは対象ワークシート内の行を表します。
2. 対象データの取得
リストフィードのエントリー一つは行一つを表します。今回は制御データシートにおけるデータ行が一行しかないことがわかっているのでentries[0]からデータを取得します。
また、今回はカラム、つまり列が1つしかない例なのですが、どの列の情報を取得するかは以下関数を使用して指定します。
getCustomByName(カラム名)
注文データの登録
データの登録を行います。今回の例ではフォームから注文データが入力されます。
// 入力データ①
$inputData = array(
"注文番号" => $orderNum+1,
"注文者" => $_POST['name'],
"スペシャル" => $_POST['special'],
"ロイヤル" => $_POST['royal'],
"オリジナル" => $_POST['original'],
);
// データを登録する②
$serviceSpread->insertRow($inputData, $dbKey, $orderSheetId);
1. 入力データ
入力するデータは配列として定義します。また、注意が必要なのが、配列の要素の名前としてカラム名を与える必要があることです。これが一致していないとエラーとなります。
2. データを登録する
下記関数を用いてデータの登録をします。
$serviceSpread->insertRow(入力データ, スプレッドシートのキー, ワークシートのキー);
