如何获取Google Form考试的总分及计算得分百分比?
解决Google Form无法获取试卷总分的问题
原代码存在的问题
maxiGrade在遍历表单响应的循环内部初始化,每次处理新响应时都会重置为0,最终仅保留最后一次循环的错误数值。- 获取题目对象的方式错误:
formResponse.getItemResponseId(j)并非正确的API用法,无法有效获取对应题目信息。 - 最终计算仅针对最后一个表单响应,没有遍历所有考生的得分数据。
修正后的代码
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)}%`); } }
关键修正说明
- 全局总分计算:直接从表单的所有题目中筛选可评分项,一次性计算出试卷总分,无需在每个响应中重复计算,效率更高且数据准确。
- 正确获取题目信息:通过
form.getItems()获取所有题目,配合isGradable()和asGradableItem().getMaxScore()安全获取可评分题目的最高分。 - 遍历所有考生数据:对每个考生的响应单独计算得分与百分比,同时增加了总分非零的判断,避免运行时错误。
- 简化得分累加:利用
getGradableItemResponses()直接获取所有可评分响应,结合reduce方法快速累加得分,代码更简洁高效。
内容的提问来源于stack exchange,提问作者Abdullah Alhuqebi
相关产品推荐
相关产品推荐

