takakisan

【GAS入門】Googleフォームで期限が来たら回答を締め切るスクリプト

2018-08-05

こんにちは!

この記事では、 「Google Apps Scriptを試してみたいな。何か簡単な例はないかな?」 という初心者の方に向けて、「期限が来たらGoogleフォームを回答できなくする」 スクリプトを作っていきながら、解説していきます。

Google Apps Scriptの始め方

Googleドライブで作成したファイルを操作するGoogle Apps Scriptを作成するには、 「・・・」より、「スクリプトエディタ」をクリックします。

「スクリプトエディタ」をクリックします。

これで、新規のGoogle Apps Scriptの「プロジェクト」が作成されます。 「プロジェクト」とは、作成したプログラムのまとまりと考えてください。
基本的に、フォームやスプレッドシート等、1つのドキュメントに対して1つのプロジェクトが対応することになります。

Googleフォームの回答を受け付けなくするスクリプト例と解説

さて、コードに移りましょう。

function myFunction() {

}

と空の関数だけがある状態です。

今回は以下のコードに置き換えて、保存してください。

function closeFormAcceptance() {
  var myForm = FormApp.openByUrl("https://docs.google.com/forms/d/1234567890abcdefghijklmnopqrstuvwxyz/");
  myForm.setAcceptingResponses(false);
}

コード1

※ FormApp.openByUrl(“……”)のURLの部分には、フォームの編集画面のURLを貼り付けてください。

フォームの編集画面のURL

URLの最後の”edit”はあっても無くても動きます。
しかし、”/“(スラッシュ)は残しておく必要があります。

順を追って解説していきます。

まずはここ。実行する関数名ですね。何でもお好みの名前をつけていいです。

function closeFormAcceptance(){

次にこの部分。

var myForm = FormApp.openByUrl("https://docs.google.com/forms/d/1234567890abcdefghijklmnopqrstuvwxyz/");

ここでは、操作する対象のフォームのオブジェクトを変数に代入しています。
型は「 Form 」になります。(Google Apps Scriptに用意されているクラスです)

FormAppというクラスが、Google Apps Scriptでフォームを開いたりできるもので、
フォームを扱いたいときにはまずこいつを使うことになります。

次にここです。

myForm.setAcceptingResponses(false);

変数myFormにはForm型のオブジェクトが入っています。
そいつが持っている setAcceptingResponses() という関数を実行します。
引数はBoolean型です。

これは何かというと、フォームの編集画面の「回答」で、回答を受け付けるかどうかを設定できるのですが、

回答を受け付け1

回答を受け付け2

これと同じことをスクリプトから実行できるものです。
引数にtrueを入れると受付中になり、falseを入れると受け付けなくなります。

コード全体としてやっていることは、
対象のフォームを開き、そのフォームを回答を受け付けない状態にする、ということになります。

試しに実行してみましょう。
エディタ画面のメニューに、作成した関数がプルダウン表示されます。

作成した関数がプルダウン表示されます

実行したい関数を選択した状態で、「実行」をクリックすると実行できます。

「承認が必要です」というメッセージが出るので、「許可を確認」を押してください。

「承認が必要です」というメッセージが出るので、「許可を確認」を押してください。

スクリプトを実行するGoogleアカウントを選択して、「許可」を押してください。

スクリプトを実行するGoogleアカウントを選択して、「許可」を押してください。

実行するとフォームの回答を受け付けない状態になります。

回答を受け付けない状態

setAcceptingResponses()の引数をtrueにして、再度実行すると、
回答を受け付ける状態に戻ります。

引数をtrueに

受付中の状態

時間が来たらスクリプトを実行するようにする

今の状態では手動でしかスクリプトが実行できないので、自動で実行するように設定しましょう。
フォームの期限が来たら実行するようにしてやればいいですね。

スクリプトを自動実行するには、「トリガー」という仕組みを利用します。
Google Apps Scriptの「トリガー」にはいくつか種類があるのですが、今回は「 時間主導型 」というものを使います。

これは、「○月○日○時になったら実行」とか、「毎日○時に実行」といった、時間指定で実行させるものです。

トリガーの設定方法は2種類あります。
エディタ画面の「現在のプロジェクトのトリガー」から設定する方法と、トリガー設定の関数を実行する方法です。
今回は手軽な「現在のプロジェクトのトリガー」から設定する方法を説明します。

エディタ画面の「編集」→「現在のプロジェクトのトリガー」をクリックします。

エディタ画面の「編集」→「現在のプロジェクトのトリガー」をクリックします。

「トリガーが設定されていません。今すぐ追加するにはここをクリックしてください。」という箇所をクリックします。

「トリガーが設定されていません。今すぐ追加するにはここをクリックしてください。」という箇所をクリックします。

「実行」の箇所に実行したい関数を選択し、「イベント」の箇所には、「時間主導型」、「特定の日時」を選択します。
「YYYY-MM-DD HH:MM 形式の日付」の箇所に、フォームの回答を締め切る日時を入力します。
「2018年12月1日00時00分」なら「2018-12-01 00:00」ですね。

トリガー設定

そして「保存」をすれば、設定した日時にスクリプトが自動実行され、フォームが受付しない状態となります。

お疲れ様でした。

フォームの回答をメール通知するスクリプトを解説する記事も書いたので、よろしければ御覧ください。
【GAS入門】Googleフォームの回答があったらメール通知するスクリプトを作ってみよう

以上です!

スポンサーリンク