はじめに
前回、Google Apps ScriptでGoogleカレンダーからタイムスケジュールを作成してみたを行った結果を元に簡単にGASのノウハウと使った感想についてまとめました。
関数じゃ難しい!GASを使った理由
以前を作る際にGASを使うきっかけになったのは、以下のような理由からでした。
Excelでも関数だけで行うのは難しく、マクロやVBAなどを使うことになる場合がありそうです。
セルのカラーコード
- 取得ができない
複数の条件からそれぞれマッチする値やセル番号を取得
- VLOOKUPや集計関数を使いこなせばできると思うが複雑
- 計算するためのセルがいくつも必要なのでヤダ!
Googleカレンダーからデータを取得したい
- Slackなどのサービスと連携したい
私がよく使った関数3選
こちらのソースコードで実際に使っています。
Logger
ロガークラスです。
Logger.log()
- ログを出力します
使用例
Logger.log('apple');
SpreadsheetApp
スプレッドシートを操作するためのクラス群です。
SpreadsheetApp.getActive().getSheetByName()
- 操作するシートを指定します
使用例
SpreadsheetApp.getActive().getSheetByName("スケジュール");
getRange()
- 操作するセルの範囲を指定します
- 関数操作のときのような行列番号を指定する方法と、行列を単なる数値で指定する方法の2種類があります
使用例
var sheet = SpreadsheetApp.getActive().getSheetByName("スケジュール");
var range = sheet.getRange("B3:O50");
getValues()/setValues()
- セルの値を操作します
- Values関数の場合は、複数のセルの値を配列形式で扱います
- 1セルのみの場合は、getValue()/setValue()を使用します
使用例
var cells = sheet.getRange(1, 2, 1, 16);
var dateHeaders = cells.getValues();
getBackground()/setBackground()
- セルの色を操作します
- 引数にはカラーコードを指定します
使用例
var range = sheet.getRange("B3:O50");
range.setBackground("#FF0000");
parseXXX()
- 演算や出力を行う際は型指定が厳密になっているので、
- パースを行う必要があります
使用例
// int型
parseInt(1);
// float型
parseFloat(1);
// string型
String(1);
ここが楽しいよ!GAS
大方はJavaScriptなので学習コストが低い
当たり前だけどセルに関数を挿入できるのはいい
スクリプトエディタのUIが直感的
Google製サービス連携が楽
ここがつらいよ!GAS
スクリプトエディタが貧弱
- 自動整形やインデント表示がない
6分以上の実行でタイムアウトエラー
- イベントトリガーの場合は、6分以内の処理にしなければならない
- 実行時刻を指定するタスクスケジューラなら大丈夫そう
foreachがちょっと変(GASというよりJavascript)
- for(var num in numbers)だとキーが取得できない
- numbers.forEach(function(num, key)みたいな記述になる
イベントトリガーの条件が少ない
- セルの値が変更されたとき、とか色々ほしい
実行速度が遅い
- 仕方なしだけどタイムアウトエラーにならないようにするのに頭を使う
修正パッチ機能とかほしい
- 使ってはいませんが、厳密なソースコード管理は以下のようにするといいらしい
- [gapps を使って Google Apps Script を継続的にデプロイする[(http://kakakakakku.hatenablog.com/entry/2017/02/26/034115)