0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Googleフォームを毎日回答受付開始・終了する

Last updated at Posted at 2024-02-20

1 目的

Googleフォームで、毎日の一定時間帯だけ回答を受け付けたい。その場合、プロジェクトに受付開始の関数と受付終了の関数を作っておいて、それぞれトリガーを、時間主導型、日付ベースのタイマーで設定する方法があります。しかし、日付ベースのタイマーでは時刻が「午前7時〜8時」などの設定となり、細かい時刻が設定できません。そこで、少なくとも終了時刻は思いどおりの時刻にできるよう、フォームの回答受付を開始したらその時に終了のトリガーをつくるスクリプトを書いてみました。

(次の投稿 Googleフォームを毎日回答受付開始・終了する(その2) もあわせてお読みください)

2 スクリプト

startAndClose.gs
//回答受付を開始し、一定時間後(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時、などとしておけばよいと思います。

4 参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?