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

Google Sheets生成首字母+日期+两位序号无重复唯一ID求解

解决方案

核心思路

  • 放弃使用行号作为序号生成依据,改为直接统计当日已存在的ID的最大后缀值,自增后作为新序号,彻底规避删行导致的序号回落重复问题
  • 新增序号补零逻辑,固定占2个字符位
  • 新增当日序号超限(超过99)的异常提示,避免生成不符合规则的ID

修复后代码

function generateUniqueId() {
  // 配置参数:表格ID、工作表名、ID存储的列索引(A列为1,可根据实际调整)
  const SHEET_ID = 'XXXXXXXXXXXXXXXXXXXXXXXX';
  const SHEET_NAME = 'Sheet1';
  const ID_COLUMN_INDEX = 1;

  const ss = SpreadsheetApp.openById(SHEET_ID).getSheetByName(SHEET_NAME);
  const todayStr = Utilities.formatDate(new Date(), "GMT+8", "ddMMyy");
  const idPrefix = "T" + todayStr; // 如需修改首位字母,替换此处的"T"即可

  // 获取已有所有ID数据
  const existingIds = ss.getRange(2, ID_COLUMN_INDEX, ss.getLastRow() - 1, 1).getValues().flat();
  let maxSuffix = 0;

  // 筛选当日ID,提取最大序号
  existingIds.forEach(id => {
    if (id && id.startsWith(idPrefix)) {
      const suffix = parseInt(id.slice(-2), 10);
      if (!isNaN(suffix) && suffix > maxSuffix) {
        maxSuffix = suffix;
      }
    }
  });

  // 校验当日ID生成数量是否超限
  if (maxSuffix >= 99) {
    SpreadsheetApp.getUi().alert('今日ID生成数量已达上限(99个),无法继续生成');
    return;
  }

  // 生成2位固定长度的新序号,不足自动补前导零
  const newSuffix = String(maxSuffix + 1).padStart(2, '0');
  const newId = idPrefix + newSuffix;

  // 追加写入新行,如需同时写入其他内容可修改数组参数
  ss.appendRow([newId]);
}

关键逻辑说明

  • 每次生成ID前会全量拉取已有的ID列表,仅统计和当前日期前缀匹配的ID后缀最大值,即使有行删除,已存在的ID不会消失,因此最大值统计不会回落,不会出现重复ID
  • 序号范围严格限制在01-99之间,完全符合规则要求

内容的提问来源于stack exchange,提问作者P.J

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 09:39:02