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
相关产品推荐
相关产品推荐

