2015年6月3日水曜日

フォーム回答内容をメールで通知する | Google Apps Script

※投稿後に動作確認をしたところ不具合が見つかったため、スクリプトを修正しました。

Googleのサービスの1つにフォームがあります。

アンケートを作成し、回答結果をスプレッドシートにまとめることができて便利なのですが、回答がどれくらい集まっているかを確認するのに、毎回スプレッドシートを開かなければならないのは面倒です。私の場合、最も頻繁に利用するメールで回答状況をざっくりとでも把握したいと考えます。そこで、回答があったときに、その内容を指定したメールアドレスに送るスクリプトを用意しておきます。

---以下スクリプト---
function sendAnswer() {

    var ss = SpreadsheetApp.getActiveSheet();
    var dataRange = ss.getDataRange();
    var lastRow = dataRange.getLastRow();
 
    var date = ss.getRange("A"+lastRow).getValue();
    var name = ss.getRange("B"+lastRow).getValue();
    var answer = ss.getRange("C"+lastRow).getValue();

    var subject = "フォームの回答がありました"

    var mailBody = date + "\n"
                       + name + "\n"
                       + answer;
    var mailTo = "メールアドレス";

    GmailApp.sendEmail(mailTo,subject,mailBody);
}
---以上スクリプト---

フォームでの最新の回答は、前の回答の1つ下の行に入力されます。つまり、最新の回答内容を取得するにはデータ最下端行の各セルの値を取得すればよいことになります。

最終行A列:最新回答送信日時(タイムスタンプ)
最終行B列:本例では回答者の名前
最終行C列:回答内容
(アンケートの設問ごとに回答が入力される列が分かれます)

あとは、Google Apps Scriptでのメール送信ルールに従い、変数subject,mailTo,mailBodyで指定したメール件名と宛先、本文を使って記述します。

最後に大事なことが1つあります。

回答があった時にタイムリーにメール送信してくれると助かりますよね。
それはトリガーで実現します。

フォームから回答が送信されたときにsendAnswer()関数を起動させるトリガーを設定すれば、目的達成です。

SyntaxHighlighter