1 目的
Googleスプレッドシートに問題を入力しておいて、Googleフォームでテスト・クイズを作ります。問題の形式は4択問題、ラジオボタンとします。フォームに手入力するよりスプレッドシートの方が問題の入力がしやすそうですし、再利用なども簡単そうです。スプレッドシートのコンテナバインドプロジェクトです。
2 スプレッドシート
シートは、設定用シートと、問題用シートがあり、それぞれにデータを入力しておきます。
設定用シートは、例では、sheet1という名前にしています。フォームの題名、フォームの説明、問題のシートの名前、問題の数を入力しておきます。スクリプトを実行してフォームが作成されたら、設定シートにフォームのURL(編集用)が入ります。
問題用シートは、1行目が項目名で、2行目以下に問題、正解、解説、配点を入力しておきます。空欄がないようにして下さい。(一応エラーにならないようにはしています)
3 スクリプト
function create4takuForm() {
const myspreadsheet = SpreadsheetApp.getActiveSpreadsheet();
const mysheet1 = myspreadsheet.getSheetByName('sheet1'); //設定用シート
const data1 = mysheet1.getRange(2, 2, 4).getValues();
const formTitle = data1[0]; //フォームの題名
const formDescription = data1[1]; //フォームの説明
const mysheet2 = myspreadsheet.getSheetByName(data1[2]); //問題用シート
const quiz_num = data1[3]; //問題の数
let myform =FormApp.create(formTitle); //フォームを作成
myform.setDescription(formDescription);
myform.setIsQuiz(true); //テストにする
myform.setShowLinkToRespondAgain(true); //再回答するリンクを表示
myform.setCollectEmail(false); //メールアドレスを収集しない
//問題文データを取得
let questionList = mysheet2.getRange(2, 1, quiz_num, 9).getDisplayValues();
//空欄を無くす
for(let i = 0; i < quiz_num; i++) {
for (let j = 0; j < 9; j++) {
if (questionList[i][j] == '') {
questionList[i][j] = j;
}
}
}
for(i = 0; i < quiz_num; i++) {
let choices;
let item = myform.addMultipleChoiceItem(); //ラジオボタン
//選択肢と正解かどうか
choices = [
item.createChoice(questionList[i][2],questionList[i][7]==1),
item.createChoice(questionList[i][3],questionList[i][7]==2),
item.createChoice(questionList[i][4],questionList[i][7]==3),
item.createChoice(questionList[i][5],questionList[i][7]==4)
]
//問題文をセット
item.setTitle(questionList[i][0]+'\n'+questionList[i][1]); //問題のタイトルと問題
item.setChoices(choices); //選択肢
item.setPoints([questionList[i][8]]); //配点
item.setRequired(true); //回答必須
//フィードバックをセット
item.setFeedbackForCorrect(FormApp.createFeedback().setText(questionList[i][6]).build());
item.setFeedbackForIncorrect(FormApp.createFeedback().setText(questionList[i][6]).build());
}
//作成したフォームの編集用URLをシートに書き込む
mysheet1.getRange('B6').setValue(myform.getEditUrl());
//終了メッセージ
console.log('フォーム「' + formTitle + '」を作成しました');
}
4 使い方
設定用シートにボタンを作ってそこからcreate4takuForm関数を実行するようにしました。フォームができると、設定用シートの「フォームのURL(編集用)」にURLが入りますので、ここからフォームを開き、設定をして、「送信」すればリンクができますのでこれを回答者に知らせます。「成績の発表」を「送信直後」にするように設定したかったのですが、GASでは出来そうになかったので手動で設定しています。問題用シートを作りためておけばどんどんフォームを作ることができます。