
【GAS】Google Apps Script 活用事例 特定時刻・特定日時になったら、Google Formsの受付を終了・再開するスクリプト
最近、下記の記事で、Formsの受付を終了したり、再開するスクリプトが存在する事を知りました。特定の時刻に出来たら、さらに活用できそうだなと思いました。
特定時刻に、Formsの受付を終了するスクリプト
//毎月 1日に実行するトリガーを1度設定しておく
function closeForm() {
const time = new Date();
time.setDate(time.getDate() + 26)
time.setHours(18);
time.setMinutes(00);
ScriptApp.newTrigger('closeFormAcceptance')
.timeBased()
.at(time)
.create();
}
function closeFormAcceptance(){
//Formsの受付を終了する。
const form = FormApp.getActiveForm();
form.setAcceptingResponses(false);
//特定時刻に実行済みの、このトリガーを削除する。
deleteSpecificTrigger_(closeFormAcceptance);
}
function deleteSpecificTrigger_(name) {
const triggers = ScriptApp.getProjectTriggers();
for (const trigger of triggers) {
const triggerName = trigger.getHandlerFunction();
console.log('トリガー名:', triggerName);
if(triggerName == name){
ScriptApp.deleteTrigger(trigger);
}//if
}//for
}//end
【受付終了】
closeForm → 毎月 1日 00:00 - 01:00 の間にトリガーを実行
closeFormAcceptance → 毎月27日 18:00ちょうどに受付を終了
【受付開始】
openForm → 毎月 1日 00:00 - 01:00 の間にトリガーを実行
openFormAcceptance → 毎月 1日 09:00 ちょうどに受付を開始
closeForm が、実行されると.....。
closeFormAcceptance が新しく設定されています。
closeFormAcceptance が実行されると.....。
特定時刻になったら、受付を開始するスクリプト
function openForm() {
const time = new Date();
time.setDate(time.getDate())
time.setHours(09);
time.setMinutes(00);
ScriptApp.newTrigger('openFormAcceptance')
.timeBased()
.at(time)
.create();
}
function openFormAcceptance(){
const form = FormApp.getActiveForm();
form.setAcceptingResponses(true);
//この関数のトリガーを削除する。
deleteSpecificTrigger_(openFormAcceptance);
}
openForm を毎月1日に実行されるようにトリガーを設定する。
おまけ: トリガーを設定するサンプル
function createTimeDrivenTriggers() {
//6時間ごとに、myFunctionが動作するようにトリガーを設定する。
ScriptApp.newTrigger('myFunction')
.timeBased()
.everyHours(6)
.create();
//毎週 月曜 AM 9:00 - AM 10:00 になったら、myFunctionが動作するように、トリガーを設定する。
ScriptApp.newTrigger('myFunction')
.timeBased()
.onWeekDay(ScriptApp.WeekDay.MONDAY)
.atHour(9)
.create();
//Spreadsheetの起動時に、トリガーを設定する
const spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
ScriptApp.newTrigger('onOpen')
.forSpreadsheet(spreadsheet)
.onOpen()
.create();
}
function deleteAllTriggers() {
const triggers = ScriptApp.getProjectTriggers();
for (const trigger of triggers) {
ScriptApp.deleteTrigger(trigger);
}//for
}//end
上記は、以前書いた記事で紹介したスクリプトです。(オーナー権限の譲渡とトリガーの設定、削除)