Google Forms选择题选项随机排序但保持A-D序号有序的脚本优化
解决方案
问题出在你先给选项加序号再打乱,导致序号跟着选项一起乱了。要实现「选项打乱但序号保持A→D顺序」,得调整步骤:先打乱选项内容,再给打乱后的选项按顺序加序号。
修改后的代码如下:
// Function to create MultipleChoice questions function createMultipleChoiceQuestions(form, ss, destinationSpss, numQ1, l) { var data = ss.getSheetByName("tests"); var questions1 = data.getRange(2, 2, numQ1, 1).getValues(); // 获取所有第一部分题目 var correctAnswers1 = data.getRange(2, 3, numQ1, 1).getValues(); // 获取第一部分正确答案 var answers1 = data.getRange(2, 3, numQ1, 4).getValues(); // 获取第一部分所有选项 var imgRanges1 = data.getRange(2, 33, numQ1, 1).getValues(); // 获取第一部分所有图片ID for (var j = 0; j < numQ1; j++) { var questionText1 = questions1[j][0]; var imgRange1 = imgRanges1[j][0]; if (imgRange1 !== "") { try { var blobSource1 = DriveApp.getFileById(imgRange1).getBlob(); form.addImageItem().setImage(blobSource1).setTitle("题 " + (j + 1) + " 配图").setWidth(400); } catch (e) { Logger.log('获取图片失败,ID: ' + imgRange1 + ' - 错误信息: ' + e.message); } } var cau1 = form.addMultipleChoiceItem().setTitle("第 " + (j + 1) + " 题: " + questionText1).setRequired(true).setPoints(1); var correctAnswer1 = correctAnswers1[j][0]; // 第一步:整理原始选项(仅内容+是否正确标记,不加序号) var rawChoices = answers1[j].map(ans => ({ text: ans, isCorrect: ans === correctAnswer1 })); // 第二步:打乱选项数组 var shuffledRawChoices = shuffleArray(rawChoices); // 第三步:给打乱后的选项按顺序添加A/B/C/D序号,再创建Choice对象 var choices1 = shuffledRawChoices.map((choice, index) => cau1.createChoice(String.fromCharCode(65 + index) + ". " + choice.text, choice.isCorrect) ); cau1.setChoices(choices1); } } // Helper function to shuffle array function shuffleArray(array) { for (let i = array.length - 1; i > 0; i--) { const j = Math.floor(Math.random() * (i + 1)); [array[i], array[j]] = [array[j], array[i]]; } return array; }
关键修改点:
- 先把选项内容和「是否为正确答案」的标记存成对象数组,避免序号和选项绑定
- 打乱这个对象数组(只打乱选项顺序)
- 最后给打乱后的数组按索引顺序添加A、B、C、D序号,确保序号始终从A到D排列
内容的提问来源于stack exchange,提问作者Lê Phong Nguyễn
相关产品推荐
相关产品推荐

