如何为Google Forms测验脚本添加分节与正确答案跳转功能?
解决方案
核心思路
- 单题单章节:循环为每道题创建独立
SectionItem,将题目嵌入对应章节,同时用数组存储所有章节引用,用于后续导航配置。 - 兼顾正确答案与导航:不依赖
createChoice的重载参数,先创建基础选项,再通过setIsCorrect()和setNavigationItem()分别设置正确标记与跳转规则,实现两者共存。
修正后的完整代码
var mySheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); var data = mySheet.getDataRange().getValues(); var numberOfQuestions = data.length; // 创建表单并启用测验模式 var myForm = FormApp.create('Random Quiz').setIsQuiz(true); myForm.setTitle('Random Quiz'); // 存储所有章节,用于导航引用 var sections = []; for (var i = 0; i < numberOfQuestions; i++) { // 读取当前题目数据 var questionText = data[i][0]; var answers = data[i].slice(1, 5); var rightAnswerIndex = data[i][5] - 1; // 转换为0索引 // 创建当前问题的章节 var section = myForm.addSectionItem(); section.setTitle(`问题 ${i + 1}`); sections.push(section); // 在章节中添加单选题 var mcItem = myForm.addMultipleChoiceItem(); mcItem.setTitle(questionText); mcItem.setPoints(1); // 构建选项,同时配置正确答案与导航 var options = []; for (var j = 0; j < answers.length; j++) { var choice = mcItem.createChoice(answers[j]); // 设置是否为正确答案 choice.setIsCorrect(j === rightAnswerIndex); // 设置导航规则:答对跳下一章节,答错留当前章节 if (j === rightAnswerIndex) { // 最后一题答对直接跳转提交页 choice.setNavigationItem( i === numberOfQuestions - 1 ? FormApp.NavigationType.SUBMIT : sections[i + 1] ); } else { // 答错跳转回当前章节,允许重新作答 choice.setNavigationItem(sections[i]); } options.push(choice); } // 应用选项到单选题 mcItem.setChoices(options); }
关键细节说明
- 章节引用管理:用
sections数组保存所有章节对象,确保正确选项能精准定位到下一个章节。 - 选项属性分离设置:通过
Choice对象的两个独立方法,避开createChoice重载只能二选一的限制,同时实现正确答案标记与导航逻辑。 - 边界处理:最后一题的正确答案直接跳转到提交页,避免无后续章节的错误。
- 拼写修正:原代码中
formulario、pregunta、opciones、righrAnswerIndex等拼写错误已统一修正。
内容的提问来源于stack exchange,提问作者Kaikus
相关产品推荐
相关产品推荐

