※一般的には新しくトリガーを作成して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)) {
//正解の場合の処理
}
}
}
}