🔖
Google Apps Script(GAS) スニペットまとめ
最近 Google Apps Script を触る機会が多いので備忘録がてらまとめてみました.
学んだもの, 便利だなと思ったものは随時追加していこうと思ってます!
みなさんもこんなの便利だよ的な Tips あったらコメントもらえると嬉しいです!!
汎用系
メッセージボックスを表示しよう
Browser.msgBox("ありがとう!");
こんな感じで結果が表示されます.
Confirm を表示しよう
返り値は true
/false
ではなく 'yes'
/'no'
で返ってくる点にご注意を!
var result = Browser.msgBox("楽しいですか?", Browser.Buttons.YES_NO);
Browser.msgBox(result === 'yes' ? "良かったです!" : "そうですか... 一緒に楽しみましょう!");
Prompt を表示しよう
入力した文字列が結果として返ってきます.
書いてて思ったんですが cancel
って入力したときは入力したかどうかの判定できないですね...
var result = Browser.inputBox("お名前は?", Browser.Buttons.OK_CANCEL);
if (result !== 'cancel') {
Browser.msgBox(result + 'さん, よろしくね!');
}
UUID を生成しよう
連番ぽくない id 生成したいときなんかに便利!
var uuid = Utilities.getUuid();
console.log(uuid); // 718e3f4d-993f-42a0-9d96-13b95eae7949
スリープしよう
console.log('start');
Utilities.sleep(1000);
console.log('end'); // 1秒後に表示される
スプレッドシート系
アクティブなシートを取得
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
シート名からシートを取得
var sheet = spreadsheet.getSheetByName('シート1');
シートのセルの内容を取得
var value = sheet.getRange('A1').getValue();
console.log(value);
シートのセルの内容をすべて取得
var values = sheet.getDataRange().getValues();
console.log(values); // [[...], [...], ...]
シートのセルにテキストを書き込む
// A1 に Hello, world! を書き込む
sheet.getRange('A1').setValue('Hello, world!');
// 当然式もいける
sheet.getRange('B1').setValue('=SUM(A:A)');
アクティブなセルにテキストを書き込む
sheet.getActiveCell().setValue('Hello, world!');
イベント系
編集時に発火するイベント
/*
* value ... 値
* oldValue ... 編集前の値
* range ... 編集した範囲
*/
function onEdit(e) {
Browser.msgBox(e.value);
}
GET API
doGet という関数を定義してデプロイすれば外部サービスから API として使うことができます.
function doGet(e) {
var params = JSON.stringify(e.parameter);
var output = ContentService.createTextOutput(params);
output.setMimeType(ContentService.MimeType.JSON);
return output;
}
POST API
doGet の POST 版
function doPost(e) {
var body = e.postData.contents;
var output = ContentService.createTextOutput(body);
output.setMimeType(ContentService.MimeType.JSON);
return output;
}
その他
外部 API を叩いてデータを取得
基本 GAS は同期的に処理してくれるので async/await 的なことする必要はありません.
GET
var url = "https://jsonplaceholder.typicode.com/todos/1";
var res = UrlFetchApp.fetch(url);
console.log(res.getContentText()); // { "userId": 1, "id": 1, ... }
POST
var url = "https://apiexample.com/v1/items";
var item = { title: 'Hello, world!' };
var opts = {
method: 'POST',
headers: { "Content-Type": 'application/json' },
payload: JSON.stringify(item),
};
var res = UrlFetchApp.fetch(url, opts);
console.log(res.getContentText());
CSV の内容を JSON にする
若干 GAS とは関係ないですが, よく使うコードです.
CSV 形式でシートを書いていれば一発で JSON(Object の配列) に変換します.
var values = sheet.getDataRange().getValues();
var titles = values.shift();
var data = values.map(v => {
var obj = {};
titles.forEach((title, index) => {
obj[title] = v[index];
});
return obj;
});
console.log(data);
こんな感じの CSV が
id,title,description
1,javascript,最高の言語
2,c,ゲーム開発ならこれ
3,go,最近のバックエンド開発のトレンド
こうなります
[
{
id: "1",
title: "javascript",
description: "最高の言語"
},
{
id: "2",
title: "c",
description: "ゲーム開発ならこれ"
},
{
id: "3",
title: "go",
description: "最近のバックエンド開発のトレンド"
}
]
Discussion
Google Driveでのファイル操作も追記してほしいです!