如何通过Google Apps Script获取含多选网格题的Google Forms测验总分
如何用Google Apps Script获取含多选网格题的Google Form测验总分
可以实现,但无法直接读取Google自动计算的“总分参数”,需要通过适配多选网格题的逻辑重新计算总分——核心是正确处理多选网格题的行级得分累加。
解决思路
Google Form的自动评分中,多选网格题的得分是每行选项得分的总和,常规的getScore()方法无法直接返回这类题的总分,必须遍历每行获取对应选项的得分再累加。其他题型(单选、多选等)仍可通过getScore()直接获取单题得分。
实用脚本示例
绑定脚本到测验对应的响应表格,添加onFormSubmit触发器后,即可在用户提交时自动计算并写入总分:
function onFormSubmit(e) { const formResponse = e.response; let totalScore = 0; // 遍历所有题目响应 formResponse.getItemResponses().forEach(itemResp => { const formItem = itemResp.getItem(); const itemType = formItem.getType(); // 处理多选网格题 if (itemType === FormApp.ItemType.MULTIPLE_CHOICE_GRID) { const gridItem = formItem.asMultipleChoiceGridItem(); const userRowResponses = itemResp.getResponse(); // 数组,对应每行的选择值 const rows = gridItem.getRows(); // 遍历每行计算得分 rows.forEach((row, index) => { const selectedChoice = userRowResponses[index]; const rowScore = gridItem.getScoreForChoice(row, selectedChoice); totalScore += rowScore || 0; }); } // 处理其他带评分的题型 else if (formItem.getGrading()) { const singleItemScore = itemResp.getScore(); totalScore += singleItemScore || 0; } }); // 将总分写入响应表格的最后一列 const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); const targetCell = sheet.getRange(sheet.getLastRow(), sheet.getLastColumn()); targetCell.setValue(totalScore); }
关键说明
getScoreForChoice()方法:专门用于多选网格题,传入行标签和用户选择的选项值,返回该行的得分,完美解决网格题的得分累加问题。- 触发器设置:在脚本编辑器中,点击「编辑」→「当前项目的触发器」,添加一个“表单提交”触发器,绑定到上述函数。
- 评分前提:确保表单中所有题目(包括多选网格题的每行)都已在Google Form后台设置好对应得分。
内容的提问来源于stack exchange,提问作者Shani Andodson
相关产品推荐
相关产品推荐

