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

基于下拉选项的Google Form-Sheet分类递增编号Apps Script实现

基于Google Apps Script实现按分类生成递增编号(Google Form提交同步至Sheet)

你的需求是让Swimmers和Lifeguards两类提交各自拥有独立的递增编号,两类编号互不干扰、分别统计。原代码是全局统一递增,无法实现分类计数,下面是修改后的完整实现代码:

function onFormSubmit(e) {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  const lastRow = sheet.getLastRow();
  // 定义分类列(D列,对应索引4)和编号列(最后一列+1,也可改成固定列,比如E列填5)
  const categoryCol = 4;
  const incrementCol = sheet.getLastColumn() + 1;

  // 添加编号列表头(如果不存在)
  if (lastRow === 1 && !sheet.getRange(1, incrementCol).getValue()) {
    sheet.getRange(1, incrementCol).setValue("分类编号");
  }

  // 获取当前提交的分类值(Swimmers/Lifeguards)
  const currentCategory = e.values[categoryCol - 1]; // e.values从0开始索引,列号需减1

  // 获取所有已存在的同分类记录的编号
  const allRows = sheet.getRange(2, 1, lastRow - 1, incrementCol).getValues();
  const categoryNumbers = allRows
    .filter(row => row[categoryCol - 1] === currentCategory)
    .map(row => row[incrementCol - 1])
    .filter(num => typeof num === 'number' && !isNaN(num));

  // 计算新编号:同分类无记录则从1开始,否则取最大值+1
  let newIncrementNumber = 1;
  if (categoryNumbers.length > 0) {
    newIncrementNumber = Math.max(...categoryNumbers) + 1;
  }

  // 给当前行设置编号
  sheet.getRange(lastRow, incrementCol).setValue(newIncrementNumber);

  // 按第二列排序(保留你原有的排序逻辑)
  sortSheetByColumn(sheet, 2);
}

function sortSheetByColumn(sheet, column) {
  const range = sheet.getRange(2, 1, sheet.getLastRow() - 1, sheet.getLastColumn());
  range.sort({column: column, ascending: true});
}

function createTrigger() {
  const triggers = ScriptApp.getProjectTriggers();
  triggers.forEach(trigger => {
    if (trigger.getHandlerFunction() === "onFormSubmit") {
      ScriptApp.deleteTrigger(trigger);
    }
  });
  ScriptApp.newTrigger('onFormSubmit')
    .forSpreadsheet(SpreadsheetApp.getActiveSpreadsheet())
    .onFormSubmit()
    .create();
}

关键逻辑说明

  • 分类列定位:把categoryCol设为4对应D列,若你的分类列不是D列,直接修改这个数字即可。
  • 获取当前分类:通过事件对象e直接读取提交的分类值,比手动读取行数据更高效准确。
  • 筛选同分类编号:遍历所有已有记录,筛选出当前分类的有效编号(过滤非数字值避免干扰)。
  • 计算新编号:用Math.max找到同分类的最大编号,加1得到新编号;若为该分类第一条记录,直接从1开始。

部署步骤

  1. 打开你的Google Sheet,点击菜单栏「扩展程序」→「Apps脚本」。
  2. 删除原有代码,粘贴上面的新代码。
  3. 点击保存按钮,给脚本起个名字(比如「分类编号生成器」)。
  4. 执行createTrigger函数一次,创建表单提交触发事件(首次执行需授权,按提示完成即可)。
  5. 提交测试表单,验证编号是否按分类正确递增。

内容的提问来源于stack exchange,提问作者Vanessa Martinez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 23:16:00