[PHP]スプレッドシートをPHPで操作する

スプレッドシートへの読み込みと書き込みをPHPで操作したかった。そして実装してみた。

GCPの操作

スプレッドシートを操作する上でGCPのSheets APIを使用することになる。
下記の手順でGCP上で諸々の設定をまずは行う必要がある。

  • GCP上で新規プロジェクトを作成する。(もしくは任意のプロジェクト内で操作を行う)
  • Google Sheets APIページでAPIを有効にする
  • 「認証情報を作成」から新規にサービスアカウントを作成する
    • 「このサービス アカウントにプロジェクトへのアクセスを許可する」は省略する
    • 「ユーザーにこのサービス アカウントへのアクセス権を付与(オプション)」は省略する
  • 認証に使用する鍵を作成する。
    • 端末にJSONファイルをダウンロードする。

以上の手順が完了した後にGoogle Sheets APIの画面から「認証情報」を選択するとアカウントの一覧が表示される。
この中からサービスアカウントのメールアドレスを取得してスプレッドシートの共有ユーザーとして登録する。これでまずは連携のためのセットアップが完了する。

PHPプログラムの実装

まずはPHP用のクライアントライブラリをダウンロードする。

$ composer require google/apiclient:"^2.0"

PHPでプログラムを作成する上でGoogleアカウントの認証を行う必要があるが、これはGCPを操作した時に作成されたJSONファイルを使用する。
ここではauth-key.jsonというファイル名に変更して使用する。

スプレッドシートの読み込み

読み込みを行うプログラムは以下のようになる。

<?php
require __DIR__ . '/vendor/autoload.php';
$key_file = __DIR__ . './auth-key.json';
// スプレッドシートのID
$sheet_id = 'xxxxxxxxxxxxxxxxxxxx';

// アカウント認証インスタンスの生成
$client = new Google_Client();
$client->setAuthConfig($key_file);
$client->setApplicationName('Sheet Api Test');
$scopes = [Google_Service_Sheets::SPREADSHEETS];
$client->setScopes($scopes);

// シートの読み込みインスタンスを生成
$service = new Google_Service_Sheets($client);
// 1列目の値を取得
$response = $service->spreadsheets_values->get($sheet_id, 'sheet1!A:A');
var_dump($response);

関数を実行すると$responseにはGoogle_Service_Sheets_ValueRangeが返される。
このオブジェクトのvaluesプロパティにスプレッドシートの値が保持されることになる。
下記はvar_dump()の結果。(1行目にある2つのセルの値を取得)

object(Google_Service_Sheets_ValueRange)#58 (7) {
    ["collection_key":protected]=>
    string(6) "values"
    ["majorDimension"]=>
    string(4) "ROWS"
    ["range"]=>
    string(14) "sheet1!A1:A978"
    ["values"]=>
    array(2) {
        [0]=>
        array(1) {
          [0]=>
          string(3) "9/1"
        }
        [1]=>
        array(1) {
          [0]=>
          string(3) "9/2"
        }
    }
    ["internal_gapi_mappings":protected]=>
    array(0) {
    }
    ["modelData":protected]=>
    array(0) {
    }
    ["processed":protected]=>
    array(0) {
    }
}

スプレッドシートの書き込み

書き込みを行うプログラムは以下のようになる。
書き込み用のインスタンスを作成し、書き込む値を指定するだけで簡単に操作を行える。

<?php
require __DIR__ . '/vendor/autoload.php';
$key_file = __DIR__ . './auth-key.json';
// スプレッドシートのID
$sheet_id = 'xxxxxxxxxxxxxxxxxxxx';

// アカウント認証インスタンスの生成
$client = new Google_Client();
$client->setAuthConfig($key_file);
$client->setApplicationName('Sheet Api Test');
$scopes = [Google_Service_Sheets::SPREADSHEETS];
$client->setScopes($scopes);

// シートの書き込みインスタンスを生成
$sheet = new Google_Service_Sheets($client);
// 書き込みデータ
$values = [
    [1,2,3,4,5],
];
$body = new Google_Service_Sheets_ValueRange([
    'values' => $values,
]);
// 書き込みの実行
$response = $sheet->spreadsheets_values->append(
    $sheet_id,// spread sheet id
    'sheet1!B18:F18',
    $body,
    ['valueInputOption' => 'USER_ENTERED']
);

参考

Sheets API を使ってPHPでGoogle スプレッドシートにデータを保存する

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

14 + 12 =

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください