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

如何从问卷题目获取得分并写入Google Sheet?代码修复求助

问题修正方案

核心问题分析

你的代码存在两个致命问题:

  1. getScores函数递归调用自身,会直接导致栈溢出错误,完全无法正常执行
  2. 没有定义正确答案的匹配逻辑,也没有处理传入的答题数组,根本无法生成得分

修正后的完整代码

首先你需要先定义每道题的正确答案(示例中假设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中的循环逻辑匹配

注意事项

  1. 确保correctAnswers数组的长度和values数组长度一致(即对应第14到18列的5道题)
  2. 选项文本需要完全匹配(比如问卷中选项是"选项A",这里就不能只写"A",要和提交的文本完全一致)
  3. 测试时可以手动触发onFormSubmit函数,传入模拟的e参数验证逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 13:23:20