勉強したことのメモ

webプログラマが勉強したことのメモ。

GoogleスプレッドシートとPHPの連携

      2021/03/11

GoogleスプレッドシートとPHPプログラムを連携させたいという案件をたまに見かける。多くの場合、何らかのフォームから登録した際にMySQLとは別にスプレッドシート側にも追記していきたいといった内容になる。以下に方法をメモ。

 

スプレッドシートを作成する

以下よりスプレッドシートを新規作成する。

https://www.google.com/intl/ja_jp/sheets/about/

作成すると以下のようなのURLが発行され「xxxxxxx」の部分がスプレッドシートIDとなるのでメモしておく。

https://docs.google.com/spreadsheets/d/xxxxxxxxxxxxxxx/edit#gid=0

 

Google Cloud Platformで諸々設定する

以下Google Cloud Platformでプロジェクトを作成する。

https://console.cloud.google.com

次にGoogle Sheets APIを有効化し、認証情報を作成する。

認証情報を作成するとJSONファイルが生成されるのでダウンロードする。またJSONファイル内に「client_email」という項目があり、以下のようなメールアドレスが記入されているので、そのメールアドレスにスプレッドシート側で共有しておく。

 

PHPプログラムの作成

PHPプログラムを設置するディレクトリに以下コマンドでクライアントプログラムを導入する。

curl -sS https://getcomposer.org/installer | php
php composer.phar require google/apiclient:"^2.0"

 

データを追記する場合

<?php
require __DIR__. '/vendor/autoload.php';

//ダウンロードしたファイル
$keyFile = __DIR__. "/credentials.json";

// アカウント認証情報インスタンスを作成
$client = new Google_Client();
$client->setAuthConfig($keyFile);

//任意名
$client->setApplicationName("Sheet API TEST");

//サービスの権限スコープ
$scopes = [Google_Service_Sheets::SPREADSHEETS];
$client->setScopes($scopes);

//シート情報を操作するインスタンスを生成
$sheet = new Google_Service_Sheets($client);

//対象のスプレッドシートのIDを指定
$sheet_id = 'xxxxxxxx';

//シート名
$sheet_name = 'シート1';

//保存するデータ
$values = [
	['山田2', '花子2'],
	['山田2', '太朗2']
];

//データ操作領域を設定
$body = new Google_Service_Sheets_ValueRange([
	'values' => $values,
]);

//追記
$response = $sheet->spreadsheets_values->append(
	$sheet_id,
	$sheet_name,
	$body,
	["valueInputOption" => 'USER_ENTERED']
);

var_export($response->getUpdates());

 

データを取得する場合

<?php
require __DIR__. '/vendor/autoload.php';

//ダウンロードしたファイル
$keyFile = __DIR__. "/credentials.json";

// アカウント認証情報インスタンスを作成
$client = new Google_Client();
$client->setAuthConfig($keyFile);

//任意名
$client->setApplicationName("Sheet API TEST");

//サービスの権限スコープ
$scopes = [Google_Service_Sheets::SPREADSHEETS];
$client->setScopes($scopes);

//シート情報を操作するインスタンスを生成
$sheet = new Google_Service_Sheets($client);

//対象のスプレッドシートのIDを指定
$sheet_id = 'xxxxxxxx';

//シート名
$sheet_name = 'シート1';

//取得範囲を指定(dataシートのA1〜B8)
$range = $sheet_name . '!A1:B8';
$response = $sheet->spreadsheets_values->get($sheet_id, $range);
$values = $response->getValues();//帰ってきたresponseから値を取得
 
print_r($values);

 

所感

いつも思うがGoogle Cloud Platformの操作が面倒。どこに何があるのか分かりづらい気がする。プログラムよりGCPの設定に時間がかかった。

尚、スプレッドシートの連携についてはとりあえず追記がメインになりそうなので、とりあえずは対応できそう。

 

参考サイト

http://bashalog.c-brains.jp/19/04/12-101500.php

 - PHP, Google Apps Script, Google

  関連記事

pdfからjpg/jpegへ出来るだけ劣化させずに変換

やりたかった事はpdfからjpg画像への変換。 imagemagick使えばすぐ ...

PHPで外部ファイルから配列を取得

やりたかった事。 ①管理画面で必要項目を入力すると、aaa.phpが 生成される ...

MySQLiでUPDATE文

MySQLiでUPDATE文 ■ソース $mysqli = new mysqli ...

カンマ区切りの文字列で最後のカンマを排除

文字列をカンマ区切りにして、カンマを取り外して 配列にする際、頭もしくはお尻につ ...

PHPとLINEを連携させて通知を送る

PHPとLINEを連携させ、LINEに何らかの通知メッセージを送信したい。以下に ...

PHPのチェック系関数

たまたまis_objectという関数を見かけて、 is_numericとかiss ...

Facebookのタイムラインを取得して表示する方法

Facebookのタイムラインを取得してきて、表示させたいという案件があった。 ...

MySQLで加算しつつNULL値は0にする

いくつかのコードに対して投票を行い、 その合計値をスコアとして出したい。 ただ、 ...

Warning: Division by zero in

PHPでグラフ作ってる時に出たエラー 「Warning: Division by ...

PHPで画像にロゴをつける

フォームから送られてきた画像にロゴをつけたかった。 結論としてclass.upl ...