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

如何修改Apps Script实现Google表单按答案跳转分区功能

Google Apps Script 实现表单「根据答案跳转分区」修改方案

核心实现逻辑

要启用按答案跳转功能,需要用到MultipleChoiceItem.createChoice()的导航参数:该方法支持在选项文本、是否正确的布尔值之外,传入跳转目标(支持传入具体分区对象,或是表单内置导航规则比如直接提交)。
原代码所有题目都放在表单初始默认分区下,没有拆分独立分区、也未给选项绑定跳转规则,因此无法实现该功能。以下以最常用的测验跳转逻辑为例修改:

  • 第一题放在表单首页,其余每道题单独占用一个独立分区
  • 选中正确答案:自动跳转到下一题所在分区,最后一题答对直接跳转提交
  • 选中错误答案:自动跳转到统一的答错提示分区,直接结束测验
  • 优化原代码冗余的多分支判断,自动识别正确答案位置,简化代码结构
  • 优化数据读取逻辑,一次性读取表格所需范围,减少API调用提升运行速度

修改后完整代码

function popForm() {
  var ss = SpreadsheetApp.getActive();
  var sheet = ss.getSheetByName('Sheet1');
  var numberRows = sheet.getDataRange().getNumRows();

  // 一次性读取所有需要的表格数据,避免多次调用接口
  var allData = sheet.getRange(1,1,numberRows,6).getValues();
  // 拆分题目、正确答案、选项数组
  var myQuestions = allData.map(row => row[0]);
  var myAnswers = allData.map(row => row[1]);
  var myGuesses = allData.map(row => row.slice(1,6));

  // 横向打乱每行选项顺序
  var myShuffled = myGuesses.map(shuffleEachRow);

  // 创建测验表单
  var form = FormApp.create('States and Capitals Quiz');
  form.setIsQuiz(true);

  // 存储所有元素引用,方便后续绑定规则
  var itemRefs = [];

  // 按展示顺序创建所有分区和题目
  // 第一题直接放在默认首页,不需要额外加分页
  var firstQuestion = form.addMultipleChoiceItem()
  .setTitle(myQuestions[0])
  .setPoints(1);
  itemRefs.push({
    type: 'question',
    index: 0,
    obj: firstQuestion
  });

  // 从第二题开始,每道题前添加分页符(独立分区)
  for (var i = 1; i < numberRows; i++) {
    var section = form.addPageBreakItem().setTitle(`第${i+1}题`);
    itemRefs.push({
      type: 'section',
      index: i,
      obj: section
    });
    var question = form.addMultipleChoiceItem()
    .setTitle(myQuestions[i])
    .setPoints(1);
    itemRefs.push({
      type: 'question',
      index: i,
      obj: question
    });
  }

  // 创建答错提示分区,放在所有题目之后
  var wrongSection = form.addPageBreakItem()
  .setTitle('回答错误')
  .setHelpText('很遗憾你答错了,测验结束')
  // 设置该分区浏览完后直接提交表单
  .setGoToPage(FormApp.PageNavigationType.SUBMIT);

  // 逐题绑定选项和跳转规则
  for (var i = 0; i < numberRows; i++) {
    var currentQuestion = itemRefs.find(item => item.type === 'question' && item.index === i).obj;
    // 确定当前题答对后的跳转目标
    var correctTarget;
    if (i === numberRows - 1) {
      // 最后一题答对直接提交
      correctTarget = FormApp.PageNavigationType.SUBMIT;
    } else {
      // 其余题目答对跳转到下一题的分区
      correctTarget = itemRefs.find(item => item.type === 'section' && item.index === i+1).obj;
    }
    // 答错统一跳转到错误提示分区
    var wrongTarget = wrongSection;

    // 自动识别正确答案位置,生成带得分、跳转规则的选项
    var choices = myShuffled[i].map(optionText => {
      return optionText === myAnswers[i]
        ? currentQuestion.createChoice(optionText, true, correctTarget)
        : currentQuestion.createChoice(optionText, false, wrongTarget);
    });
    currentQuestion.setChoices(choices);
  }
}

// 每行选项随机打乱函数
function shuffleEachRow(array) {
  var i, j, temp;
  for (i = array.length - 1; i > 0; i--) {
    j = Math.floor(Math.random() * (i + 1));
    temp = array[i];
    array[i] = array[j];
    array[j] = temp;
  }
  return array;
}

自定义调整说明

  • 如果需要实现不同错误选项跳转到不同讲解分区的逻辑,可以在表格中新增列配置每个选项对应的跳转规则,生成选项时读取对应配置传入createChoice即可
  • 如果不需要答错直接结束,可以在错误分区后添加解析内容,再将错误分区的跳转目标改为下一题分区,实现答错看解析后继续答题的效果
  • 所有分区支持自定义标题、说明文本、插入图片/视频等元素,可以按需扩展

内容的提问来源于stack exchange,提问作者Juan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 22:57:10