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

关联Google表单的表格统计姓名出现次数的自定义菜单脚本实现

实现方案

你可以通过以下步骤同时实现动态读取统计值、批量处理姓名、存储统计结果的需求:

1. 核心逻辑说明

  • 先把需要统计的姓名统一存到数组里,后续新增姓名只需要修改数组即可,无需重复写代码
  • 遍历姓名数组,逐个调用你已经写好的getData函数获取实时统计值,拼接后传入弹窗显示
  • 统计结果可以存在对象变量(单次运行可用)、脚本属性(永久存储,关闭表格后仍然保留)、指定表格区域(可视化展示,方便直接查看)三种方式,按需选择即可

2. 完整可运行代码

// 你原有统计函数不需要改,直接复用即可
function getData(target) {
  var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Form Responses 1");
  var lrow = ss.getLastRow();
  var r = ss.getRange(2, 2, lrow-1, 1); // 跳过表头取第二列所有数据
  var data = r.getValues();
  var count = 0;

  for (var i=0; i<data.length; i++) {
    if (data[i][0] == target) {
      count++;
    }
  }
  return count;
}

function summarizeNames() {
  var ui = SpreadsheetApp.getUi();
  // 1. 配置要统计的姓名列表,新增姓名直接加在数组里即可
  const nameList = ["Jack", "Rose", "Bill"];
  // 2. 用于存储统计结果的对象,格式为{姓名: 出现次数}
  const nameCountMap = {};

  // 遍历姓名列表逐个统计+弹窗确认
  for(let name of nameList) {
    // 调用统计函数拿到实时数值
    const count = getData(name);
    // 存到结果对象里
    nameCountMap[name] = count;
    // 拼接内容弹出确认框
    const res = ui.prompt(`Is this amount of ${name}s correct?`, count , ui.ButtonSet.YES_NO);
    // 如果需要处理用户的YES/NO选择,可以在这里加逻辑,比如点YES才存储,点NO可以允许修改之类的
    // if(res.getSelectedButton() == ui.Button.YES) { 你的自定义逻辑 }
  }

  // ========== 以下是三种存储统计结果的方式,按需开启即可 ==========
  // 方式1:打印到脚本日志,运行后在Apps Script编辑器的“执行日志”里查看
  console.log("统计结果:", nameCountMap);

  // 方式2:存储到脚本属性,永久保存,后续其他函数也可以读取
  // const scriptProps = PropertiesService.getScriptProperties();
  // scriptProps.setProperty("nameCountResult", JSON.stringify(nameCountMap));
  // 读取的时候用 JSON.parse(scriptProps.getProperty("nameCountResult")) 即可

  // 方式3:写入到表格指定区域(比如新建一个叫“统计结果”的工作表,把结果写进去)
  // const resultSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("统计结果") || SpreadsheetApp.getActiveSpreadsheet().insertSheet("统计结果");
  // // 清空原有内容再写
  // resultSheet.clearContents();
  // resultSheet.getRange(1,1).setValue("姓名");
  // resultSheet.getRange(1,2).setValue("出现次数");
  // let row = 2;
  // for(let name in nameCountMap) {
  //   resultSheet.getRange(row,1).setValue(name);
  //   resultSheet.getRange(row,2).setValue(nameCountMap[name]);
  //   row++;
  // }
}

3. 注意事项

  • 如果你要统计的姓名有变更,只需要修改nameList数组里的内容即可,不需要调整其他逻辑
  • 如果需要处理用户点击YES/NO后的后续操作,直接在弹窗获取res的位置加对应逻辑即可
  • 三种存储方式都已经写了注释,需要用哪种就把对应代码的注释去掉即可

内容的提问来源于stack exchange,提问作者Kristopher Pacifico

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 22:54:04