Access Google Sheets with PHP
PHP: 7.2
在一些小型的專案或工具之中,如果把 Google Spreadsheets
當成是資料來源端來使用,這樣既可以滿足人為操作的需求,又可以透過程式自動化處理相關邏輯。
Get API token
在正式操作之前,我們必須先拿到操作 Google API
的權限。
- 到 Google Developers Console 建立一個新專案
- 進到該專案後,選擇「啟用 API 和服務」
- 搜尋 「Google Sheets API」
- 啟用 「Google Sheets API」
- 啟用後回到專案 Dashboard,並建立一個「服務帳戶憑證」
- 填入服務帳戶的資訊
- 進到「服務帳戶」裡新建「金鑰」
- 金鑰類型選擇 「JSON」
- 完成後,你會下載到一個金鑰的 JSON 檔
Notice: 金鑰的 JSON 檔只要遺失就拿不回來了,必須妥善保存
- 把你的 Google Sheet 檔案分享給剛剛
6.
建立「服務帳戶」時產生的信箱
- 取得你的 Google Sheet ID:
https://docs.google.com/spreadsheets/d/{YOUR_SHEET_ID}/edit#gid=0
Usage with PHP
首先,需要安裝 Google API PHP Client
composer require google/apiclient:^2.0
讀取資料
require __DIR__ . '/vendor/autoload.php';
// 建立 Google Client
$client = new \Google_Client();
$client->setApplicationName('Google Sheets and PHP');
// 設定權限
$client->setScopes([\Google_Service_Sheets::SPREADSHEETS]);
$client->setAccessType('offline');
// 引入金鑰
$client->setAuthConfig(__DIR__ . '/credentials.json');
// 建立 Google Sheets Service
$service = new \Google_Service_Sheets($client);
// Google Sheet ID
$spreadsheetId = 'YOUR SHEET ID';
// 取得 Sheet 範圍
$getRange = "A1:L20";
// 讀取資料
$response = $service->spreadsheets_values->get($spreadsheetId, $getRange);
$values = $response->getValues();
print_r($values);
寫入資料
require __DIR__ . '/vendor/autoload.php';
// 建立 Google Client
$client = new \Google_Client();
$client->setApplicationName('Google Sheets and PHP');
// 設定權限
$client->setScopes([\Google_Service_Sheets::SPREADSHEETS]);
$client->setAccessType('offline');
// 引入金鑰
$client->setAuthConfig(__DIR__ . '/credentials.json');
// 建立 Google Sheets Service
$service = new \Google_Service_Sheets($client);
// Google Sheet ID
$spreadsheetId = 'YOUR SHEET ID';
// 取得 Sheet 範圍
$updateRange = 'A3:B3';
// 值
$values = [['林小瑜', 26]];
// Update Sheet
$body = new \Google_Service_Sheets_ValueRange([
'values' => $values
]);
$params = [
'valueInputOption' => 'RAW'
];
$updateSheet = $service->spreadsheets_values->update($spreadsheetId, $updateRange, $body, $params);
Notice: 更細部的需求可以參考
Google API PHP Client
的文件。