今度、彼女と金沢へ旅行に行くのですが、それのためにGoogle Siteを使用して、観光地や日程をまとめたサイトを作成しました。
それだけではわざわざサイト作成した意味がないとGoogleフォームを使用してクイズラリーを作成しました。
なぜ、Googleフォームを使用したのかというとそのときはプログラミング不要でクイズラリーを作成できると思ったからです。
しかしながら、Googleフォームではその回答に応じて返信を変化させることができないので、
GASというGoogleのサービスをスクリプトで操作できるサービスを使用して、
Googleフォームでの回答に応じて正解であれば、次の問題のフォームを送信し、不正解であれば不正解であるという通知を送る。
そして、ヒントと送信されれば、ヒントを送信するという仕組みを操作しました。
以下にはそのGAS内のスクリプトを記述します。
function sendemail(e) {
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var sheet = SpreadsheetApp.getActiveSheet(); //更新があったシートを取得
var sheetName = sheet.getSheetName(); //シートの名前を取得
var templateSheet = spreadsheet.getSheetByName('メール本文'); // 本文テンプレートのシート名を指定
const textObject = templateSheet.createTextFinder(sheetName); //メール本文のシートから問題番号の含まれるセルを取得
const results = textObject.findAll();
var notation = results[0].getA1Notation();
var coloms = notation.slice( 0, 1 ) ; //列の名前だけを取得
let wVals0 = sheet.getDataRange().getValues();
let score = sheet.getRange(wVals0.length, 3).getValue(); //scoreがc列のため
let answer = sheet.getRange(wVals0.length, 4).getValue(); //答えがd列のため
let emailAdress = sheet.getRange(wVals0.length, 2).getValue(); //emailadressがb列のため
if (score == 1) {
var emailBodyTemplate = templateSheet.getRange(`${coloms}2`).getValue(); //問題番号に適したメールの本文を取得
GmailApp.sendEmail(
emailAdress
, `【テスト】${sheetName} 大正解`
, emailBodyTemplate
)
}else if(answer == "ヒント"){
var emailBodyTemplate = templateSheet.getRange(`${coloms}4`).getValue(); //問題番号に適したメールの本文を取得
GmailApp.sendEmail(
emailAdress
, `【テスト】${sheetName} ヒントをあげるよ!`
, emailBodyTemplate
)
}else{
var emailBodyTemplate = templateSheet.getRange(`${coloms}3`).getValue(); //問題番号に適したメールの本文を取得
GmailApp.sendEmail(
emailAdress
, `【テスト】${sheetName} 不正解。`
, emailBodyTemplate
)
}
}
分からないことがあればコメントくだされば、お答えします。
メール返信用の回答をこの画像のように入れてしまい、それを取得するために、シートの名前と同じ名前のセルを取得してその列のアルファベットを無理矢理取得しました。
Googleフォームでは一問だけテストという形で提出させて、そのスコアで点数を判定しています。
もっと合理的な方法があれば教えて下さい。
そして、Googleフォームを使用するよりも多分LINEでやったほうがやりやすいような気がするので作り直したいと思います。
それではご覧いただきありがとうございます。