1 目的
Googleフォームで、毎日の一定時間帯だけ回答を受け付けたい。その場合、プロジェクトに受付開始の関数と受付終了の関数を作っておいて、それぞれトリガーを、時間主導型、日付ベースのタイマーで設定する方法があります。しかし、日付ベースのタイマーでは時刻が「午前7時〜8時」などの設定となり、細かい時刻が設定できません。そこで、少なくとも終了時刻は思いどおりの時刻にできるよう、フォームの回答受付を開始したらその時に終了のトリガーをつくるスクリプトを書いてみました。
(次の投稿 Googleフォームを毎日回答受付開始・終了する(その2) もあわせてお読みください)
2 スクリプト
//回答受付を開始し、一定時間後(openHoursで指定)に終了する関数
function startAndClose1() {
const formId = 'フォームのID';
const myform = FormApp.openById(formId);
myform.setAcceptingResponses(true); //フォーム受付開始
const openHours = 1; //何時間受け付けるか
// 所定の時間(ミリ秒)後にフォームの回答受付を終了するトリガーを設定
ScriptApp.newTrigger('closeForm1')
.timeBased()
.after(openHours * 60 * 60 * 1000)
.create();
}
//回答受付を開始し、終了時間(closeDateTimeで指定)に終了する関数
function startAndClose2(){
const formId = 'フォームのID';
const myform = FormApp.openById(formId);
myform.setAcceptingResponses(true); //フォーム受付開始
const currentDate = new Date(); //現在日時(開始日時)
//同じ日の午前8時30分を終了時間とする
const closeDateTime = new Date(
currentDate.getFullYear(),
currentDate.getMonth(),
currentDate.getDate(),
8, 30, 0, 0
);
//終了時間に終了するようトリガーを設定
const triggerTime = closeDateTime.getTime() - currentDate.getTime();
if (triggerTime > 0) {
ScriptApp.newTrigger('closeForm1')
.timeBased()
.after(triggerTime)
.create();
Logger.log('指定時刻に回答受付を終了するトリガーが設定されました。');
} else {
Logger.log('指定日時が過去のため、トリガーを設定できません。');
}
}
//回答受付を終了する関数
function closeForm1() {
const formId = 'フォームのID';
const myform = FormApp.openById(formId);
myform.setAcceptingResponses(false); //受付終了
}
startAndClose1関数は、フォームの回答受付を開始し、一定時間後に受付終了するトリガーを設定します。「一定時間」は const openHours に一時間単位でセットします。例では、1時間にしてあります。
startAndClose2関数は、フォームの回答受付を開始し、その日の後刻の、指定終了時間に受付終了するトリガーを設定します。例では、8:30にしてあります。
closeForm1関数は、回答受付を終了する関数で、startAndClose1 か startAndClose2から使われます。
3 使い方
const formIdには、実際に使用するフォームのIDをセットします。ブラウザでフォーム設定画面を開いた時、URLの d/ に続き次の/までの間の英数文字がIDです。「一定時間」や「指定終了時間」を、希望の時間にします。あとは、手動かトリガーの設定で、startAndClose1かstartAndClose2を実行します。
早朝から受付を開始し8:30に締め切り、これを毎日繰り返す、というのであれば、startAndClose2を、トリガーの設定で、時間主導型、日付ベースのタイマーで、時刻を午前2時〜3時、などとしておけばよいと思います。