ショコラ
PHP Google_Service_Sheetsの書式をコピーするには?
1セルずつ書式をコピーして、コピー先に書式を張り付ける。
グーグルスプレッドシートの使いかたは、
リクエストを貯めて、バッチアップデートで実行の流れです。
もっさん先輩
ひとまず、スプレッドシートを取得する
$google_credentials_json = "あのグーグルのJSON形式の文字列";
$google_sheet_id = "シートID(URLのところ)";
$client = new \Google_Client();
$client->addScope( \Google_Service_Sheets::SPREADSHEETS );
// 認証
$auth = tempnam(sys_get_temp_dir(),'auth-');
file_put_contents($auth,$google_credentials_json);
$client->setAuthConfig($auth);
unlink($auth);
$service = new \Google_Service_Sheets($client);
$spreadsheet = $service->spreadsheets->get($google_sheet_id);
コピー元シートから書記を取得して、1セルずつ書式を設定します。
// コピー元データを取得
$spreadsheet = $service->spreadsheets->get($google_sheet_id,['ranges'=>["シート名!A1:C3"],'includeGridData'=> true]);
$gridData = $spreadsheet->getSheets()[0]->getData()[0];
$rowData = $gridData->getRowData();
foreach ($rowData as $rowIndex => $row) {
$cellData = $row->getValues();
foreach ($cellData as $colIndex => $cell) {
$requests[] =
new \Google_Service_Sheets_Request([
'repeatCell' => [
'range' => [
'sheetId' => $sheet_id, // 対象シートのIDを指定
'startRowIndex' => $rowIndex + 10, // コピー先。ここは for(i=startRowIndex; i<endRowIndex; i++) のようなイメージ
'endRowIndex' => $rowIndex + 11,
'startColumnIndex' => $colIndex, // コピー先。ここも for(i=startColumnIndex; i<endColumnIndex; i++) のようなイメージ
'endColumnIndex' => $colIndex + 1,
],
'cell' => [
'userEnteredFormat' => $cell->getUserEnteredFormat(), // セルの書式をコピー
],
'fields' => 'userEnteredFormat',
],
]);
}
}
$request = new \Google_Service_Sheets_BatchUpdateSpreadsheetRequest(['requests'=> $requests ]);
$service->spreadsheets->batchUpdate($google_sheet_id,$request);
以上