ワークシートの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(入力データ, スプレッドシートのキー, ワークシートのキー);