自動でスクリプトを実行させたいとき必要になる、スプレッドシートのトリガーについてのメモ
ざっくりと、トリガーについて
あるイベント(スプレッドシートが編集された、定刻になった、など)が起こったとき、GASの関数を自動的に実行させるもの
トリガーを設置する方法は3つ
1. スクリプトからScriptApp.newTrigger(“実行する関数名”)を呼ぶ
2. Apps Scriptのメニュー「トリガー」からトリガーを追加でインストールする(インストールトリガー)
3. Apps Scriptで以下の関数を実装する(シンプルトリガー)
- onOpen(e) ユーザーが編集権限を持つスプレッドシートを開いたときに実行される
- onInstall(e) ユーザーがエディタアドオンをインストールしたときに実行される
- onEdit(e) ユーザーがスプレッドシートの値を変更したときに実行される
- onSelectionChange(e) ユーザーがスプレッドシートの選択を変更したときに実行される
- doGet(e) ユーザーがウェブアプリにアクセスするか、プログラムがウェブアプリにアクセスするか、プログラムがウェブアプリに HTTP GET リクエストを送信すると実行される
- doPost(e) プログラムがウェブアプリに HTTP POST リクエストを送信すると実行される
2. のトリガーのイベントはなんでも設定できるというわけではなく、設定できる3つのソースがある
- スプレッドシートから
- 時間主導型
- カレンダーから
このメモでは、2. の「スプレッドシートから」について説明する
メニューからトリガー設定できるスプレッドシートのイベントの種類は4つ
メニューから設定できるスプレッドシートでのイベントは次の4種類がある
- 起動時
- 編集時
- 変更時
- フォーム送信時
起動時
スプレッドシートを開いたときにイベントが発生する
開いたユーザーが編集権限を持っていないと実行されない
3.のfuncton onOpen(e)を実装した場合、起動時イベントが起こったときにonOpen(e)が実行される
2.のメニューからトリガーを設置する場合は、任意の名前の関数を設定することができる
編集時
スプレッドシートのセルの値をユーザーが変更した時にイベントが発生する
3.のfunction onEdit(e)を実装した場合、編集時イベントが起こったときに、onEdit(e)が実行される
2.のメニューからトリガーを設置する場合は、任意の名前の関数を設定することができる
変更時
スプレッドシートのレイアウトが変更されたときにイベントが発生する
レイアウトの変更としては以下のものがある
- EDIT セルの値の変更(レイアウトではないですが)
- INSERT_ROW 行の追加
- INSERT_COLUMN 列の追加
- REMOVE_ROW 行の削除
- REMOVE_COLUMN 列の削除
- INSERT_GRID シートの追加
- REMOVE_GRID シートの削除
- FORMAT わかりませんでした
- OTHER 上記以外(シートの並べ替え、名前の変更、他にもありそうだがわからず)
フォーム送信時
未調査
自分で試してみたこと
特定の名前を持つシートの一覧をシートが追加されたときに自動で更新したかった
シート一覧への追加漏れをなくすため、自動でシート一覧を更新したい
更新時イベントでシートの追加は取れたが、シート名に意味がない「〇〇のコピー」など
更新時イベントで変更のタイプがOTHERならシート名の変更を取れるが、他にどんな変更があるのかわからず、うーんやめよう
結局、起動時イベント(onOpen)でスプレッドシートを開いたときに更新するようにしたが正直微妙
開くたびに呼ばれて、編集履歴が毎回書き変わる
更新時イベントの変更タイプがOTHERについて、もう少し深掘りした方が良さげ
まとめ
特になし
少しでもスプレッドシート実装の役に立てば嬉しいです
onChangeを実装するとスプレッドシートの変更が取れるよ、みたいな記事が多くて混乱したので整理するために記事を作成しました
インストールトリガーとシンプルトリガーの違いに気をつけましょう
コメント