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

求助:用Google Apps Script实现表单提交的带前缀自增ID生成

实现专属ID生成与同步的解决方案

核心思路

  • 根据表单选择的project类型生成对应首字母缩写前缀
  • 为每个类型维护独立的自增序号,通过关联的Spreadsheet存储计数(避免重复)
  • 将生成的ID同步写入表单响应表,并替换到生成的Google Doc中

具体代码修改

function autoFillGoogleDocFromForm(e) {
  // 获取表单提交数据
  var timestamp = e.values[0];
  var Name = e.values[1];
  var class1 = e.values[2];
  var team = e.values[3];
  var project = e.values[4];
  var phone = e.values[5];
  
  // 1. 生成ID前缀
  var prefix = "";
  switch(project.toLowerCase()) {
    case "mechanical":
      prefix = "mc";
      break;
    case "nonmechanical":
      prefix = "nm";
      break;
    case "it":
      prefix = "it";
      break;
    case "open":
      prefix = "op";
      break;
    default:
      prefix = "unk"; // 未知类型默认前缀
  }
  
  // 2. 获取并更新对应类型的自增序号
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  // 用单独的配置表存储计数,避免响应表被修改影响
  var configSheet = ss.getSheetByName("ID计数");
  // 如果配置表不存在则创建并初始化
  if(!configSheet) {
    configSheet = ss.insertSheet("ID计数");
    configSheet.appendRow(["类型", "当前序号"]);
    configSheet.appendRow(["mc", 0]);
    configSheet.appendRow(["nm", 0]);
    configSheet.appendRow(["it", 0]);
    configSheet.appendRow(["op", 0]);
    configSheet.appendRow(["unk", 0]);
  }
  
  // 查找对应前缀的行并更新序号
  var data = configSheet.getDataRange().getValues();
  var currentNum = 0;
  var rowIndex = -1;
  for(var i=1; i<data.length; i++) {
    if(data[i][0] === prefix) {
      currentNum = data[i][1] + 1;
      rowIndex = i+1; // 表格行号从1开始
      break;
    }
  }
  
  // 更新配置表中的序号
  configSheet.getRange(rowIndex, 2).setValue(currentNum);
  
  // 3. 格式化生成ID(补零到3位)
  var formattedNum = currentNum.toString().padStart(3, "0");
  var customID = prefix + formattedNum;
  
  // 4. 将ID写入表单响应表的对应行
  var responseSheet = ss.getSheetByName("表单响应 1"); // 替换为你的实际响应表名称
  var lastRow = responseSheet.getLastRow();
  responseSheet.getRange(lastRow, 7).setValue(customID); // 第7列对应原idnumber列位置
  
  // 后续文档生成逻辑
  var file = DriveApp.getFileById("1nVMeanqeOL3fgEcjlzoq1u_FKu5E9Ta5IEO0ng-mt6Y"); 
  var folder = DriveApp.getFolderById("1NeEHCsNhbQ0bAfcd3o-7X4SAhyEWXx1W")
  var copy = file.makeCopy(team + ',' + project + ' - ' + customID, folder); // 文件名加入ID便于识别
  
  var doc = DocumentApp.openById(copy.getId()); 
  var body = doc.getBody(); 
  
  // 替换文档中的占位符,用生成的customID代替原idnumber
  body.replaceText('{{name}}', Name); 
  body.replaceText('{{class1}}', class1);  
  body.replaceText('{{team}}', team); 
  body.replaceText('{{type}}', project); 
  body.replaceText('{{no}}', phone); 
  body.replaceText('{{id}}', customID);
  
  doc.saveAndClose(); 
}

关键步骤说明

  • 前缀映射:通过switch语句将表单选项转换为对应缩写,保证ID前缀匹配准确
  • 序号存储:使用独立的ID计数表维护各类型序号,避免响应表数据变动导致计数错误
  • ID格式化:用padStart(3, "0")将序号统一格式化为3位数字,确保ID格式一致(如mc001、it010)
  • 同步写入:定位到响应表的最新提交行,将生成的ID写入对应列
  • 文档同步:把生成的ID替换到文档的{{id}}占位符,同时在文件名中加入ID方便查找

注意事项

  1. 确认关联的Spreadsheet中存在表单响应 1(或你的实际响应表名称),代码会自动创建ID计数表
  2. 首次运行脚本时需授予Drive和Spreadsheet的访问权限
  3. 若表单响应表的列顺序有变动,需调整写入ID的列号(responseSheet.getRange(lastRow, 7)中的7)

内容的提问来源于stack exchange,提问作者zuniyed hossain

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 04:10:29