You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 22:40:18