Created
September 29, 2025 07:01
-
-
Save ochilab/804b8fa55ee824e5cff3ba45882dac96 to your computer and use it in GitHub Desktop.
Google Sheetの情報から GoogleFormを作成するGAS
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| function createQuizForm() { | |
| var form = FormApp.create('復習テスト'); // フォームのタイトル | |
| form.setIsQuiz(true); | |
| form.setCollectEmail(true); // メールアドレス収集 | |
| form.setLimitOneResponsePerUser(true); // 1人1回答 | |
| var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); | |
| // シート全体のデータ | |
| var data = sheet.getDataRange().getValues(); | |
| // 列数(シートの右端列数) | |
| var col = sheet.getLastColumn(); | |
| // B列の実質的な最終行(空白を除外) | |
| var lastRowAll = sheet.getLastRow(); | |
| var colBValues = sheet.getRange(1, 2, lastRowAll, 1).getValues(); // 1行目〜最終行のB列 | |
| var lastRowB = 0; | |
| for (var r = colBValues.length - 1; r >= 0; r--) { | |
| if (String(colBValues[r][0]).trim() !== '') { | |
| lastRowB = r + 1; // シートの行番号(1始まり) | |
| break; | |
| } | |
| } | |
| // 見出し行(1行目)を除いた問題数 | |
| var row = Math.max(0, lastRowB - 1); | |
| for (var i = 1; i <= row; i++) { // 1行目はヘッダーなので2行目(i=1)から | |
| var questionTitle = String(data[i][0]).trim(); // 1列目:問題文 | |
| var correctAnswer = String(data[i][1]).trim(); // 2列目:正解ラベル | |
| var point = Number(data[i][2]) || 0; // 3列目:得点(数値化) | |
| // 4列目以降を選択肢として取得(空白除去・トリム) | |
| var choices = data[i] | |
| .slice(3, col) // 0始まりインデックス:3=4列目〜col-1列目まで | |
| .map(function(v){ return String(v).trim(); }) | |
| .filter(function(v){ return v !== ''; }); | |
| // 問題文または選択肢が不足していればスキップ | |
| if (!questionTitle || choices.length === 0) continue; | |
| // Dropdown(リスト)で作成(MultipleChoiceにしたい場合は addMultipleChoiceItem() に変更) | |
| var item = form.addListItem(); | |
| item.setTitle(questionTitle); | |
| var choiceArray = []; | |
| for (var j = 0; j < choices.length; j++) { | |
| var label = choices[j]; | |
| var isCorrect = (label === correctAnswer); | |
| choiceArray.push(item.createChoice(label, isCorrect)); | |
| } | |
| item.setChoices(choiceArray); | |
| item.setPoints(point); | |
| } | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment