Access Google Sheets with PHP

PHP: 7.2

在一些小型的專案或工具之中,如果把 Google Spreadsheets 當成是資料來源端來使用,這樣既可以滿足人為操作的需求,又可以透過程式自動化處理相關邏輯。

Get API token

在正式操作之前,我們必須先拿到操作 Google API 的權限。

  1. Google Developers Console 建立一個新專案
  2. 進到該專案後,選擇「啟用 API 和服務」
  3. 搜尋 「Google Sheets API」
  4. 啟用 「Google Sheets API」

Enable Google Sheets API

  1. 啟用後回到專案 Dashboard,並建立一個「服務帳戶憑證」

Create Service Account

  1. 填入服務帳戶的資訊

Service Account Info

  1. 進到「服務帳戶」裡新建「金鑰」

Create Credentials

  1. 金鑰類型選擇 「JSON」
  2. 完成後,你會下載到一個金鑰的 JSON 檔

Notice: 金鑰的 JSON 檔只要遺失就拿不回來了,必須妥善保存

  1. 把你的 Google Sheet 檔案分享給剛剛 6. 建立「服務帳戶」時產生的信箱

Share File

  1. 取得你的 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 的文件。

Categories: PHP