使用Apps Script为谷歌表格重复文档号追加序号生成唯一值
谷歌表格唯一文档编号生成脚本解决方案
实现思路
- 新增全局计数器对象,用于统计每种基础编号的出现频次
- 生成基础编号后,根据计数器当前值拼接两位补零的序号后缀
- 每次生成完编号后更新对应基础编号的计数器值
- 修复原代码中未定义变量
drawNum的笔误问题
修改后完整代码
function onOpen () { const ui = SpreadsheetApp.getUi(); const menu = ui.createMenu('Create Document Number'); menu.addItem('Create Base Document Number','createbaseDocumentNumber'); menu.addToUi(); } function createbaseDocumentNumber() { const ss = SpreadsheetApp.getActiveSpreadsheet(); const sheet = ss.getActiveSheet(); const rows = sheet.getDataRange().getDisplayValues(); // 存储每个基础编号的出现次数 const numberCounter = {}; rows.forEach(function(row, index){ // 跳过表头和房间号为空的行 if (index === 0) return; if (!row[2]) return; // 可选:跳过已经生成过编号的行,避免覆盖历史数据 // if (row[0]) return; // 生成基础编号(不带序号后缀) const typeSuffix = row[4] === "TECHNICAL" ? "T" : "E"; const baseNumber = `PROJECT1-${row[2]}-${row[3]}-${typeSuffix}`; // 初始化对应基础编号的计数器,默认从0开始 if (numberCounter[baseNumber] === undefined) { numberCounter[baseNumber] = 0; } // 生成两位补零的序号 const serialSuffix = numberCounter[baseNumber].toString().padStart(2, '0'); // 拼接最终唯一编号 const finalDocumentNumber = `${baseNumber}-${serialSuffix}`; // 写入第一列 sheet.getRange(index + 1, 1).setValue(finalDocumentNumber); // 计数器自增,供下一个同基础编号的文档使用 numberCounter[baseNumber]++; }) }
自定义调整说明
- 如果需要序号从
01而非00开始,只需要将计数器初始值改为1即可 - 如果需要保留已生成的历史编号,取消注释上述可选判断代码即可
内容的提问来源于stack exchange,提问作者NSK
相关产品推荐
相关产品推荐

