LoginSignup
6
3

More than 3 years have passed since last update.

Laravel x GAS API で Spreadsheet 自動作成してみた

Posted at

はじめに

実務で、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レポジトリを完成させることも夢ではありません。みなさんの参考になれば幸いです。

もっとこうした方がいい!!、ここは間違ってる!! 等ございましたら遠慮なくお申し付けください!
もっとスマートなコードの書き方あると思うので、思いつく方いらっしゃいましたらご教授お願いします!

6
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
3