はじめに
実務で、GAS(Google Apps Script)を使って Spreadsheet 作成APIを作ったので、そのやり方を書く。
今回は、Laravel の Guzzle を使って APIを叩いたので、そのテンプレも書くことにした。
ここでは、clasp などのコマンドラインでの作業の説明は割愛する。
Guzzle テンプレート
$client = new \GuzzleHttp\Client();
url = https://script.google.com/a/XXXX.co.jp/macros/s/XXXXXXXXXXXXXXXXXXXXXXXX/exec
$sheets = ['[シート名]' => [['名前', 'Soma', 'Sekimoto'],['住所', 'Tokyo', 'Suginami'], ['年齢と性別', ' 23歳', '男']]]
$res = $client->post(
$url,
[\GuzzleHttp\RequestOptions::JSON => [
'title' => 'スプレッドシートタイトル',
'sheets' => $sheets,
'spread_sheet_id' => '[スプレッドシート ID]',
'startPositions' => ['startRow' => 3, 'startColumn' => 2],
]]);
GAS(Google Apps Script) API
CreateSheet.js
function doPost(e) {
// 引数で送られてきたパラメータを取得する
var c = e.postData.contents
var contents = JSON.parse(c)
// パラメーターをそれぞれの変数に格納
var title = contents.title
var sheets = contents.sheets
var startPositions = contents.startPositions
var startRow = startPositions.startRow
var startColumn = startPositions.startColumn
var spreadsheetId = contents.spread_sheet_id
var spreadsheet = spreadsheetId ? SpreadsheetApp.openById(spreadsheetId).copy(title) : SpreadsheetApp.create(title);
// Parameter に spread_sheet_id がない場合は、新しいスプレッドシートを作るようにする。
i = 0
for (var sheet_name in sheets) {
if (i >= spreadsheet.getSheets().length) {
spreadsheet.insertSheet()
}
// シートが足りなくなった時は新しいシートを追加させる。
var sheet = spreadsheet.getSheets()[i]
var rows = sheets[sheet_name]
sheet.getRange(startRow, startColumn, rows.length, rows[0].length).setValues(rows)
sheet.getRange(startRow, startColumn, rows.length, rows[0].length).createFilter()
sheet.setName(sheet_name)
i += 1;
}
spreadsheet.addEditor("/xx/domain/XXXX.co.jp")
// 編集者を付与できる。
return ContentService.createTextOutput(JSON.stringify({url: spreadsheet.getUrl()})).setMimeType(ContentService.MimeType.JSON);
// 作成したシートの URL を返す。
}
これでスプレッドシート自動作成API完成!!!!
おわりに
既存アプリ x GAS APIの無限大の可能性を利用すれば、最強のAPIレポジトリを完成させることも夢ではありません。みなさんの参考になれば幸いです。
もっとこうした方がいい!!、ここは間違ってる!! 等ございましたら遠慮なくお申し付けください!
もっとスマートなコードの書き方あると思うので、思いつく方いらっしゃいましたらご教授お願いします!