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

Google表单并发提交出现重复Ticket ID及空行问题求助

解决Google表单并发提交时Ticket ID重复及表格空行问题

问题根源

  1. 并发提交场景下,getLastRow()会因为表单提交的行还未完全写入表格,导致多个onFormSubmit实例获取到相同的行号,进而生成重复的Ticket ID。
  2. 直接修改表单全局确认消息(form.setConfirmationMessage()),会导致后续提交的用户看到前一个用户的工单ID,而非自己的专属ID。
  3. 依赖行号生成ID的逻辑本身不具备唯一性保障,且写入单元格时可能因为行未完全创建出现空行。

修正方案

使用事件对象定位当前提交行,结合脚本属性存储自增计数器生成唯一ID,同时通过邮件发送个性化确认消息(避免全局消息被覆盖):

function onFormSubmit(e) {
  // 获取当前提交的行范围
  const responseRow = e.range;
  const sheet = responseRow.getSheet();
  const idColumn = 1;

  // 用脚本属性存储全局自增计数器,避免并发冲突
  const scriptProperties = PropertiesService.getScriptProperties();
  let ticketCounter = scriptProperties.getProperty('ticketCounter');
  
  // 首次运行时初始化计数器,兼容已有历史工单ID
  if (!ticketCounter) {
    const idRange = sheet.getRange(2, idColumn, sheet.getLastRow() - 1);
    const existingIds = idRange.getValues().flat().filter(id => typeof id === 'number');
    ticketCounter = existingIds.length > 0 ? Math.max(...existingIds) : 0;
  }
  
  // 生成唯一工单ID
  ticketCounter = parseInt(ticketCounter) + 1;
  const ticketID = `T-${ticketCounter.toString().padStart(4, '0')}`;
  
  // 将ID写入当前提交行的指定列
  responseRow.getCell(1, idColumn).setValue(ticketID);
  
  // 更新云端计数器
  scriptProperties.setProperty('ticketCounter', ticketCounter);

  // 获取提交用户邮箱(需表单开启"收集回复者邮箱"设置)
  const respondentEmail = e.response.getRespondentEmail();
  if (respondentEmail) {
    // 发送个性化确认邮件
    MailApp.sendEmail({
      to: respondentEmail,
      subject: '工单提交确认',
      body: `感谢提交!您的工单编号是:${ticketID}`
    });
  }

  Logger.log('新工单ID: ' + ticketID);
}

关键改进点

  • 事件对象定位行:用e.range直接获取当前提交的行,彻底避免getLastRow()的并发行号错误。
  • 云端计数器:脚本属性存储的计数器由云端维护,自带并发锁机制,确保每个提交拿到唯一ID。
  • 邮件替代全局消息:每个用户收到专属的确认邮件,不会被其他提交的全局消息覆盖。
  • 兼容历史数据:首次运行时自动读取表格中已有的最大ID,避免计数器重置后生成重复ID。

额外配置提示

  1. 打开表单设置的「回复」选项,勾选「收集回复者邮箱」,确保脚本能获取用户邮箱发送通知。
  2. 首次运行脚本时,需授权脚本访问表格、脚本属性及邮件服务。

内容的提问来源于stack exchange,提问作者Youmna Samir

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 04:57:08