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

如何通过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);
}

关键说明

  1. getScoreForChoice()方法:专门用于多选网格题,传入行标签和用户选择的选项值,返回该行的得分,完美解决网格题的得分累加问题。
  2. 触发器设置:在脚本编辑器中,点击「编辑」→「当前项目的触发器」,添加一个“表单提交”触发器,绑定到上述函数。
  3. 评分前提:确保表单中所有题目(包括多选网格题的每行)都已在Google Form后台设置好对应得分。

内容的提问来源于stack exchange,提问作者Shani Andodson

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 22:42:08