GoogleフォームでGoogle Apps Scriptを使って回答内容を自動送信する

残しておきたいので久々にブログ書く。

Googleフォームに回答を送信すると、フォームのオーナーが回答のスプレッドシートを公開していない限り何送信したか確認できない。
というわけでスクリプトで回答者に送信するようにしました。


この記事・プログラムはこちらのブログを参考にしました。

www.narugaro.com


function submitForm(e){
  /*エラーしたとき用のまるごとtry*/
  try{
    var itemResponses = e.response.getItemResponses(); 
    var editurl = e.response.getEditResponseUrl();
    var message = '';
    
    for(var i = 0; i < itemResponses.length; i++) { 
      var itemResponse = itemResponses[i]; 
      var type = itemResponse.getItem().getType();
      var question = itemResponse.getItem().getTitle(); 
      var answer = itemResponse.getResponse(); 
      
      /*質問タイトルが「名前」のやつを名前として取得*/
      if(question == '名前'){
        var username = answer;
      }
      /*質問タイトルが「メールアドレス」のやつをメールアドレスとして取得*/
      if(question == 'メールアドレス'){
        var usermail = answer;
      }
      
      /*質問番号と質問タイトルをくっつける*/
      message += (i + 1).toString() + '. ' + question + ': ' + '\n';
      /*GRIDタイプなら1行ずつテキスト化*/
      if(type == 'GRID'){
        var rows = itemResponse.getItem().asGridItem().getRows();
        for(var j = 0; j < rows.length; j++){
          var rowname = rows[j];
          var answercol = answer[j];
          message += rowname + ' : ' + answercol + '\n';
        }
      /*それ以外の形式はそのままくっつける*/
      }else{
        message += answer + '\n'; 
      }
    } 
    
    /* 管理者宛メール送信設定 */
    var address = '管理者のアドレス'; 
    var title = '[回答を受け取りました]'; 
    var content = '下記の内容で、回答を受信しました。\n\n'
    + message
    + '\n\n'
    + '※このメールはGoogleフォームからの自動送信メールです。'; 
    var options = {from: 'FROMのアドレス', name: '参加フォーム', replyTo: usermail};
    
    GmailApp.sendEmail(address, title, content, options);
    
    /*メールアドレスを入力していた場合のみ*/
    if(usermail){
      /* ユーザー宛メール送信設定 */
      var title2 = '[回答を受け付けました]'; 
      var content2 = username 
      + ' さん\n\n'
      + '回答ありがとうございます。\n'
      + '下記の内容で、受け付けました。\n'
      + '内容を変更したい場合は、もう一回フォームを送ってください。\n\n'
      + message 
      + '\n\n'
      + '回答を編集する場合このアドレスをつかってください\n'
      + editurl
      + '\n'
      + '\n'
      + '~~署名~~\n'
      + '\n\n※このメールはGoogleフォームからの自動送信メールです。'; 
      var options2 = {from: 'FROMのアドレス', name: '参加フォーム'};
      
      GmailApp.sendEmail(usermail, title2, content2, options2); 
    }
  }catch(err){
    var error = err;
    Logger.log("message:" + error.message + "\nlineNumber:" + error.lineNumber + "\nstack:" + error.stack);
  }
}


使い方
フォームの作成段階で「名前」の回答欄と、「メールアドレス」の回答欄を作ります。
フォーム編集画面の上の方の縦の…(その他)からスクリプトエディタを立ち上げる。
↑のプログラムを突っ込む。
「フォーム送信時」のトリガーを設定する。