Googleフォームで定期的に回答を収集するときなど、イベントを設定するときにトリガーを作っては消して作っては消してと手作業で繰り返すことが面倒臭かったので、コードを書いた。
const TM_OP = 'YYYY-MM-DD HH:mm'; //実行してほしい時間
ScriptApp.getProjectTriggers()
.forEach(i=>ScriptApp.deleteTrigger(i)); //不要なトリガーの除去
ScriptApp.newTrigger('setFormActive') //トリガーの作成
.timeBased()
.at(new Date(TM_OP))
.create();
肝は、先にすべてのトリガーを削除してから新しいトリガーを追加する点。
まず ScriptApp クラスの getProjectTriggers()
でプロジェクト内のトリガーを全部取得して、 deleteTrigger()
でひとつずつ削除する。地道。
応用
もし特定のトリガーを削除したくない場合…例えば関数を基準にふるい分けをするときは getHandlerFunction()
で関数名調べて、削除する・しないを決める。
ScriptApp.getProjectTriggers()
.forEach(i=>{
if(i.getHandlerFunction()!='[Function name]')
ScriptApp.deleteTrigger(i)
});
コード全体
form_open-close.gs(アンケートフォームの開閉)- GitHub(@togazo)
機能解説(補足)
- 決まった時間になったらアンケートフォームの回答を受け付ける
- 決まった時間になったらアンケートフォームの回答を締め切る
- スクリプト実行後のフォームの表示確認での回答の締め切りのON/OFFを繰り返していると締め切り忘れる場合があるので、一通りの作業が終了したであろう5分後に締め切る
- ついでにスプレッドシートに収集している過去の回答を非表示にする(フォームを使い回す時にアクティブな回の分だけパッと見たいから)