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

如何获取Google Form考试的总分及计算得分百分比?

解决Google Form无法获取试卷总分的问题

原代码存在的问题

  1. maxiGrade在遍历表单响应的循环内部初始化,每次处理新响应时都会重置为0,最终仅保留最后一次循环的错误数值。
  2. 获取题目对象的方式错误:formResponse.getItemResponseId(j)并非正确的API用法,无法有效获取对应题目信息。
  3. 最终计算仅针对最后一个表单响应,没有遍历所有考生的得分数据。

修正后的代码

function calculateExamScores() {
  var form = FormApp.getActiveForm();
  // 先计算试卷全局总分:遍历所有题目,累加可评分题目的最高分
  var totalExamScore = 0;
  var formItems = form.getItems();
  for (var i = 0; i < formItems.length; i++) {
    var item = formItems[i];
    if (item.isGradable()) {
      totalExamScore += item.asGradableItem().getMaxScore();
    }
  }

  // 遍历所有考生响应,计算每个考生的得分与百分比
  var formResponses = form.getResponses();
  for (var j = 0; j < formResponses.length; j++) {
    var formResponse = formResponses[j];
    // 累加考生的可评分题目得分
    var studentScore = formResponse.getGradableItemResponses().reduce((sum, itemResp) => sum + itemResp.getScore(), 0);
    // 计算百分比(避免总分0导致的除以0错误)
    var scorePercentage = totalExamScore > 0 ? (studentScore / totalExamScore) * 100 : 0;
    
    // 输出结果,可按需修改为写入Google表格等操作
    Logger.log(`考生 ${j+1}:得分 ${studentScore},总分 ${totalExamScore},得分百分比 ${scorePercentage.toFixed(2)}%`);
  }
}

关键修正说明

  1. 全局总分计算:直接从表单的所有题目中筛选可评分项,一次性计算出试卷总分,无需在每个响应中重复计算,效率更高且数据准确。
  2. 正确获取题目信息:通过form.getItems()获取所有题目,配合isGradable()和asGradableItem().getMaxScore()安全获取可评分题目的最高分。
  3. 遍历所有考生数据:对每个考生的响应单独计算得分与百分比,同时增加了总分非零的判断,避免运行时错误。
  4. 简化得分累加:利用getGradableItemResponses()直接获取所有可评分响应,结合reduce方法快速累加得分,代码更简洁高效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 03:52:37