PHP Google_Service_Sheetsの書式をコピーするには?

ショコラ
ショコラ

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);

以上

関連記事

Scroll to Top