見出し画像

【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 が、実行されると.....。

スクリーンショット 2021-01-30 19.00.00

closeFormAcceptance が新しく設定されています。

closeFormAcceptance が実行されると.....。

スクリーンショット 2021-01-30 17.05.19

特定時刻になったら、受付を開始するスクリプト

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


上記は、以前書いた記事で紹介したスクリプトです。(オーナー権限の譲渡とトリガーの設定、削除)

こんな記事も書いています。


この記事が参加している募集

#最近の学び

181,254件

この記事が気に入ったらサポートをしてみませんか?