Googleフォームで使うGAS

Googleフォームで使うGAS

記事
学び
※一般的には新しくトリガーを作成してGASを実行します。トリガー作成時の本人確認、実行許可が必要です。
※フォーム送信前の確認用や送信後のオリジナル画面を作りたい場合は、スプレッドシートに紐付いたGASでフォームを丸ごと作成することをおすすめします。


フォームデータの取得と処理パターン


function onFormSubmit(e) {
   // "メールアドレスを収集する"の設定時に以下でアドレスの収集ができる
   //responseはgoogleフォームに紐づいたGAS限定
  const email = e.response.getRespondentEmail();
  //データの取得
   const itemResponses = e.response.getItemResponses();
  //データの処理
}

  //データの処理(例1)
   for (let itemResponse of itemResponses) {
    const item = itemResponse.getItem();
    const itemType = item.getType();// Type別で処理したい場合に
    const title = item.getTitle();//入力欄のタイトル("お名前"など)
    const value = itemResponse.getResponse();
    //なんらかの処理
   }


//データの処理(例2) 自動返信などで入力内容をまとめたい場合など
let body = '送信内容\n\n';
 itemResponses.forEach(function(itemResponse){
    body += '【' + itemResponse.getItem().getTitle() + '】\n';
    body += itemResponse.getResponse() + '\n\n';
  });

//データの処理(例3) 入力欄名で内容を取得したい場合など
  const email = getValueByTitle(itemResponses, 'メールアドレス');

//処理関数
function getValueByTitle(items, title) {
  return items.filter(function(item) {
    return item.getItem().getTitle() === title;
  })[0].getResponse();
 }

Type別の処理例

let responseText;
 switch(itemType) {
      // チェックボックス
      case FormApp.ItemType.CHECKBOX:
        responseText = response.join(',');
        break;
      // 選択式(グリッド)
      case FormApp.ItemType.GRID:
        responseText = response.join('\n');
        break;
      // チェックボックス(グリッド)
      case FormApp.ItemType.CHECKBOX_GRID:
        responseText = response.map(e => {
          return e.join(',')
        }).join('\n');
        break;
      default:
        responseText = value;
        break;
    }

送信後表示メッセージの動的作成

※基本的なデザインは変えられません
※nameに入力された名前が入ってるケース
const form = FormApp.getActiveForm();
let msg = `
【送信完了】
${name}さん
入力ありがとうございました。
正常に送信が完了しました。
`;
  form.setConfirmationMessage(msg);

メール送信(共通)

GmailApp.sendEmail(’送信先’メールアドレス, '件名', 'メール本文', options);

options例
let options = {
  "bcc": "bccアドレス",
  "cc": "ccアドレス",
  "from": "送信元アドレス",
  "name": "GASテスト",
  "noReply": true,
  "replyTo": "返信アドレス"
};

※noReplyはGoogle Workspaceで利用可能(末尾は登録ドメイン)

テストモード時の正誤判定と配点取得(3択問題など)

function onFormSubmit(e) {
  let v = '';
  let totalPoint = 0;
  const itemResponses = e.response.getItemResponses();
  for (let itemResponse of itemResponses) {
    const item = itemResponse.getItem();
    const itemType = item.getType();
    const title = item.getTitle();
    const response = itemResponse.getResponse();//ユーザーの選択
    let point = item.asMultipleChoiceItem().getPoints();//配点取得
    let choices = item.asMultipleChoiceItem().getChoices();//全選択肢取得
    for (let i = 0; i < choices.length; i++) {
      let val = choices[i].getValue();
      let c = choices[i].isCorrectAnswer();// 正解設定されている選択肢の場合true、その他はfalse
      if ((c) && (val === response)) {
        //正解の場合の処理
     }
    }
  }
}


サービス数40万件のスキルマーケット、あなたにぴったりのサービスを探す ココナラコンテンツマーケット ノウハウ記事・テンプレート・デザイン素材はこちら