このサンプルでは Google Sheets API を使用して、Web アプリケーションからスプレッドシートの作成、書式の設定、ピボットテーブルを生成する方法を紹介します。
ここで扱うサンプル ソースコードは こちら(github.com) からダウンロードできます。
スプレッドシートの操作
スプレッドシートの作成とシートの追加
新しいスプレッドシートを作成し、シートを追加します。
/**
* スプレッドシート の作成
* $client: Googleクライアント
*/
public function createEmptySpreadsheet($client) {
try {
// スプレッドシート サービス オブジェクトを生成
$service = new \Google_Service_Sheets($client);
// スプレッドシート を作成
$postBody = new \Google_Service_Sheets_Spreadsheet([
'properties' => [
'title' => 'New Spreadsheet 1' // スプレッドシート名
]
]);
$optParams = array();
$spreadsheet = $service->spreadsheets->create($postBody, $optParams);
$spreadsheetId = $spreadsheet->spreadsheetId;
// 新しいシートを追加
$body = new \Google_Service_Sheets_BatchUpdateSpreadsheetRequest([
'requests' => [
'addSheet' => [
'properties' => [
'title' => 'New Sheet 1' // シート名
]
]
]
]);
$response = $service->spreadsheets->batchUpdate($spreadsheetId, $body);
} catch(\Exception $e) {
$msg = $e -> getMessage();
return $msg;
}
}
デモを実行すると、[New Spreadsheet 1]という名前のスプレッドシートを作成し、[New Sheet 1]シートを追加します。
データの書き出し
スプレッドシートにデータを出力します。
ドライブ で確認する/**
* スプレッドシートへのデータの書き出し
* $client: Googleクライアント
*/
public function develSpreadsheetExportcsv($client) {
// 出力するデータ
$values = [
["id","class","email","name","math","science","english"],
["1","1A","john@example.com","John J. Coons","90","88","96"],
["2","1A","crystal@example.com","Crystal C. Burnett","32","44","89"],
["3","1B","anthony@example.com","Anthony T. Dudley","72","68","24"],
["4","1B","francisca@example.com","Francisca H. Rapp","89","94","92"]
];
$range = 'CSV 1!A1:G5';
try {
// スプレッドシートサービス オブジェクトを生成
$service = new \Google_Service_Sheets($client);
// スプレッドシートを作成
$postBody = new \Google_Service_Sheets_Spreadsheet([
'properties' => [
'title' => 'CSV import 1' // スプレッドシート名
]
]);
$optParams = array();
$spreadsheet = $service->spreadsheets->create($postBody, $optParams);
$spreadsheetId = $spreadsheet->spreadsheetId;
$this->csvSpreadsheetId = $spreadsheetId;
// 新しいシートを追加
$body = new \Google_Service_Sheets_BatchUpdateSpreadsheetRequest([
'requests' => [
'addSheet' => [
'properties' => [
'title' => 'CSV 1'
]
]
]
]);
$response = $service->spreadsheets->batchUpdate($spreadsheetId, $body);
// 出力するデータを準備
$body = new \Google_Service_Sheets_ValueRange([
'values' => $values
]);
$body->setValues($values);
$params = ['valueInputOption' => 'USER_ENTERED'];
// データを出力
$result = $service->spreadsheets_values->update(
$spreadsheetId, // スプレッドシートID
$range, // 出力先のデータレンジ
$body, // 出力データ
$params // 出力オプション
);
} catch(\Exception $e) {
$msg = $e -> getMessage();
return $msg;
}
}
デモを実行すると、[CSV import 1]という名前でスプレッドシート を作成し、データを保存します。
書式の設定
保存したスプレッドシートに書式(セルの色指定)します。
ドライブで確認する/**
* スプレッドシートの書式設定
* $client: Googleクライアント
*/
public function formatSpreadsheet($client) {
try {
// ドライブサービス オブジェクトを生成
$driveClient = new \Google_Service_Drive($client);
// 名前を指定してドライブ 内のスプレッドシートを検索
$result = $driveClient->files->listFiles([
"q" => "name='CSV import 1'"
]);
$file = $result->getFiles()[0];
$spreadsheet_id = $file->getId();
// スプレッドシートサービス オブジェクトを生成
$spreadsheet_service = new \Google_Service_Sheets($client);
// シートIDを取得
$sheet_id;
$response = $spreadsheet_service->spreadsheets->get($spreadsheet_id);
$sheets = $response->getSheets();
foreach ($sheets as $sheet) {
$properties = $sheet->getProperties();
$sheet_title = $properties->getTitle();
// 名前の一致するシートを検索
if ($sheet_title == "CSV 1") {
$sheet_id = $properties->getSheetId();
break;
}
}
// 書式を設定する範囲と書式を準備
$request_data = [
'repeatCell' => [
'fields' => 'userEnteredFormat(backgroundColor)',
'range' => [
'sheetId' => $sheet_id,
'startRowIndex' => 0, // 行の開始位置
'startColumnIndex' => 0, // 列の開始位置
'endRowIndex' => 5, // 行の終了位置
'endColumnIndex' => 7, // 列の終了位置
],
'cell' => [
'userEnteredFormat' => [
'backgroundColor' => [ // RGB値でセルの背景色を指定
'red' => 234/255,
'green' => 143/255,
'blue' => 143/255
]
],
],
],
];
$requests = [new \Google_Service_Sheets_Request($request_data)];
// 書式を設定
$batchUpdateRequest = new \Google_Service_Sheets_BatchUpdateSpreadsheetRequest([
'requests' => $requests
]);
$response = $spreadsheet_service->spreadsheets->batchUpdate($spreadsheet_id, $batchUpdateRequest);
} catch(\Exception $e) {
$msg = $e -> getMessage();
return $msg;
}
}
デモを実行すると、userEnteredValue プロパティを設定してスプレッドシートの書式を指定します。
ピボットテーブルの生成
保存したスプレッドシート のデータを元にピボットテーブルを生成します。
ドライブ で確認する/**
* ピボットテーブルの生成
* $client: Googleクライアント
*/
public function develSpreadsheetGenerate($client) {
try {
// ドライブサービス オブジェクトを生成
$driveClient = new \Google_Service_Drive($client);
// 名前を指定してドライブ内のスプレッドシートを検索
$result = $driveClient->files->listFiles([
"q" => "name='CSV import 1'"
]);
$file = $result->getFiles()[0];
$spreadsheet_id = $file->getId();
// スプレッドシートサービス オブジェクトを生成
$spreadsheet_service = new \Google_Service_Sheets($client);
// シートIDを取得
$sheet_id;
$response = $spreadsheet_service->spreadsheets->get($spreadsheet_id);
$sheets = $response->getSheets();
foreach ($sheets as $sheet) {
$properties = $sheet->getProperties();
$sheet_title = $properties->getTitle();
// 名前の一致するシートを検索
if ($sheet_title == "CSV 1") {
$sheet_id = $properties->getSheetId();
break;
}
}
// ピボットテーブルの設定を準備
$requests = [
'updateCells' => [
'rows' => [
'values' => [
[
'pivotTable' => [
'source' => [
'sheetId' => $sheet_id,
'startRowIndex' => 0, // 行の開始位置
'startColumnIndex' => 0, // 列の開始位置
'endRowIndex' => 5, // 行の終了位置
'endColumnIndex' => 7 // 列の終了位置
],
'rows' => [
[
'sourceColumnOffset' => 1,
'sortOrder' => 'ASCENDING',
'showTotals' => true,
],
[
'sourceColumnOffset' => 2,
'sortOrder' => 'ASCENDING',
'showTotals' => true,
]
],
'values' => [
[
'summarizeFunction' => 'AVERAGE', // 平均値を出力
'sourceColumnOffset' => 4
],
[
'summarizeFunction' => 'AVERAGE', // 平均値を出力
'sourceColumnOffset' => 5
],
[
'summarizeFunction' => 'AVERAGE', // 平均値を出力
'sourceColumnOffset' => 6
]
],
]
]
]
],
'start' => [
'sheetId' => $sheet_id,
'rowIndex' => 7,
'columnIndex' => 2
],
'fields' => 'pivotTable'
]
];
// ピボットテーブルを生成
$batchUpdateRequest = new \Google_Service_Sheets_BatchUpdateSpreadsheetRequest([
'requests' => $requests
]);
$response = $spreadsheet_service->spreadsheets->batchUpdate($spreadsheet_id, $batchUpdateRequest);
} catch(\Exception $e) {
$msg = $e -> getMessage();
return $msg;
}
}
pivotTable プロパティを指定して、ピボットテーブルを生成します。