[PHP] Google Sheets API でシートの存在チェック
Google Sheets API ( v4 ) を使って、シートにシート名でアクセスするとき、そのシート名が存在しない場合、エラーとなる。 Google_Exception で catch することはできるが、エラーではなく別の処理を実行したいとか、なければ新たにシートを作成するとかの場合は、シート名の存在を確認したい。
しかし API には、簡単に存在チェックできるメソッドはないので、スプレッドシートから全部のシート名を取得して、対象のシート名が存在するか確認する。
存在しないシート名でアクセスした場合
スプレッドシートに「シート1」しかないのに、「シート2」からセルの値を取得しようとするとエラーになる。
$service = new Google_Service_Sheets($client);
$spreadsheetId = 'スプレッドシートの URL にある spreadsheetId';
$range = 'シート2!A1:B5';
echo "1";
$response = $service->spreadsheets_values->get($spreadsheetId, $range);
echo "2";
$values = $response->getValues();
var_dump($values);
エラーメッセージ
Fatal error: Uncaught Google_Service_Exception: { “error": { “code": 400, “message": “Unable to parse range: シート2!A1:B5", “errors": [ { “message": “Unable to parse range: シート2!A1:B5", “domain": “global", “reason": “badRequest" } ], “status": “INVALID_ARGUMENT" } } in …..
Google_Http_REST::execute(Object(GuzzleHttp\ in /hoge/hoge/vendor/google/apiclient/src/Google/Http/REST.php on line 118
Google_Exception で catch
することもできる
try{
$spreadsheetId = 'スプレッドシートの URL にある spreadsheetId';
$range = 'シート2!A1:B5';
echo "1
";
$response = $service->spreadsheets_values->get($spreadsheetId, $range);
echo "2";
$values = $response->getValues();
var_dump($values);
} catch (Google_Exception $e) {
$errors = json_decode($e->getMessage(),true);
echo "code : ".$errors["error"]["code"]."
";
echo "message : ".$errors["error"]["message"];
}
echo の出力内容
1 code : 400 message : Unable to parse range: シート2!A1:B5
シート名の存在チェック
スプレッドシートから全部のシート名を取得して、検索対象のシート名が存在するか確認するコード
function sheetsExistCkc($sheetsList, $sheetName) {
foreach($sheetsList as $sheet) {
if($sheet->properties->title === $sheetName) {
return true;
}
}
return false;
}
$service = new Google_Service_Sheets($client);
$spreadsheetId = 'スプレッドシートの URL にある spreadsheetId';
$response = $service->spreadsheets->get($spreadsheetId);
$allsheets = $response->getSheets();
if(sheetsExistCkc($allsheets, 'シート2')) {
echo "exist";
} else {
echo "not exist";
}