如何从问卷题目获取得分并写入Google Sheet?代码修复求助
问题修正方案
核心问题分析
你的代码存在两个致命问题:
getScores函数递归调用自身,会直接导致栈溢出错误,完全无法正常执行- 没有定义正确答案的匹配逻辑,也没有处理传入的答题数组,根本无法生成得分
修正后的完整代码
首先你需要先定义每道题的正确答案(示例中假设5道题的正确答案分别是"A", "B", "C", "A", "D",请根据你的实际问卷修改):
function onFormSubmit(e) { var sheet = SpreadsheetApp.getActiveSheet(); var row = sheet.getLastRow(); var startColumn = 14; var endColumn = 18; // 获取提交的答题数据(对应第14到18列的选项) var values = e.values.slice(startColumn - 1, endColumn); // 生成得分数组 var scores = getScores(values); // 遍历得分数组,写入对应单元格 for (var i = 0; i < scores.length; i++) { var column = startColumn + i; sheet.getRange(row, column).setValue(scores[i]); } } function getScores(values) { // ********** 请修改这里为你的实际正确答案 ********** var correctAnswers = ["A", "B", "C", "A", "D"]; var scores = []; // 逐个对比答题和正确答案,正确得1分,错误得0分 for (var i = 0; i < values.length; i++) { scores.push(values[i] === correctAnswers[i] ? 1 : 0); } return scores; }
关键修改点说明
- 移除了
getScores中的递归调用,改为遍历答题数据和正确答案的对比逻辑 - 新增了
correctAnswers数组,需要你根据问卷的实际正确选项填写 - 调整了列索引计算(原代码中
startColumn + i - 1会导致列偏移错误,修正为startColumn + i) getScores现在返回和答题数量对应的得分数组,和onFormSubmit中的循环逻辑匹配
注意事项
- 确保
correctAnswers数组的长度和values数组长度一致(即对应第14到18列的5道题) - 选项文本需要完全匹配(比如问卷中选项是"选项A",这里就不能只写"A",要和提交的文本完全一致)
- 测试时可以手动触发
onFormSubmit函数,传入模拟的e参数验证逻辑
内容的提问来源于stack exchange,提问作者JC Bluntch
相关产品推荐
相关产品推荐

