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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 03:54:08