久しぶりのGAS記事です。
今回は2020年4月に追加されたonSelectionChange()というシンプルトリガーについて、その内容や挙動関係についてみていきたいと思います。
シンプルトリガーの追加って久しぶりな気がするので(調べてないので本当に久しぶりかどうかはわかりません汗)、ちょっと触っていきたいなと思います。
ReleaseNoteを読んでみる
リリースノートを要約すると以下でしょうか。
- スプレッドシートだけで使えるシンプルトリガーである
- ユーザが範囲選択したときに自動的に走る
リリースノート本文
A new simple trigger, onSelectionChange(e)
, has been added for Google Sheets. The onSelectionChange(e)
trigger runs automatically when a user changes the selection in a spreadsheet.
範囲選択で自動的に実行されるということで、使い道が悩ましいところがありますね。。サイドバーとかと組み合わせるなら道は見つかるのか?
onSelectionChange()の動作条件
スプレッドシートで範囲選択をしたとき
サンプル:範囲選択したときに当該範囲の一番左上のセルの値を別シートにコピーする
サンプルコードは以下です。
function onSelectionChange(e){
let range = e.range;
let output_sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("output");
output_sheet.getRange(1, 1).setValue(range.getCell(1,1).getValue())
}
実行結果は以下になります。
outputシートが空っぽだったのが、データを入れたシートの範囲選択をしたら、無事選択範囲の一番左上のセルの値がコピーされて貼り付けられました。パチパチパチ。。。。
じゃない!!!!(w)
最後に値が消えてしまいました。。なぜかは次のセクションで。
onSelectionChangeの現状の問題点と注意点
問題点1:挙動が安定しない。。
はい、トリガーなのに最大の問題です。。昨日動いてたものが今日動かないということが多くあるようです。
スタックドライバーでも以下のような議論がされてました。時々動かないし、V8だと動作が不安定になると。。ちょい。。V8が不安定でlegacy使うといいって。。

注意点1:ページを移動しただけでも新規に範囲指定したことに
これが、動画で最後に値がブランクになってしまった要因です。(あっもちろん値がブランクだったら実行しないようにスクリプト組めば上記の例だとカバーできますがw)
要はセル指定するたびに実行されるので、条件を色々つけて動作させるパターンを考えないと実は予期せぬ問題を引き起こしそうです。
もちろんシンプルトリガーなので、閲覧権限のみのユーザが実行した場合は動かないので、そこはいいんですが、そもそも自分自身でも変なことしそう。。
というわけで、スクリプト内でちゃんと挙動制御できる条件設定つけれる方向けかなと思いました。
まとめ
onSelectionChangeシンプルトリガーについてみてきました。
新規に追加されたトリガーで追加されてから日が浅いこともあり、まだ動作は不安定感が残ります。機能的には使い道をちゃんと考えないといけないかなと思いました。