如何基于指定参数在Google Sheets中生成唯一Trip ID
Google Sheets 运输Trip ID唯一值生成实现方案
两种实现路径均可行,可根据自身需求选择:
方案一:原生公式实现(零代码,配置即用)
- 适用场景:仅需生成ID,无额外定制化逻辑
- 操作方式:假设表格第1行为表头,日期数据存放在A列,选中U2单元格输入以下公式,按回车后整列会自动填充所有行的ID,后续新增行也会自动生成值:
=ARRAYFORMULA(IF(ROW(A:A)=1,"Trip ID",IF(NOT(ISBLANK(A:A)),T:T®EXREPLACE(S:S,"[A-Z-]","")&TEXT(DATEVALUE(A:A),"ddmmyy")&TEXT(COUNTIFS(T:T®EXREPLACE(S:S,"[A-Z-]","")&TEXT(DATEVALUE(A:A),"ddmmyy"),T2:T®EXREPLACE(S2:S,"[A-Z-]","")&TEXT(DATEVALUE(A2:A),"ddmmyy"),ROW(A:A),"<="&ROW(A:A)),"00"),"")))
- 逻辑说明:
- 自动提取S列卡车尺寸的纯数字部分,兼容带横杠(如S-12)和不带横杠(如S12)的尺寸格式
- 自动将日期格式化为
两位日+两位月+两位年的固定格式 - 按「承运商+车型+日期」维度自动统计行程序号,序号自动补零为两位
- 生成规则完全匹配要求格式,天然保证整列ID唯一
如果日期存放在其他列,把公式中所有
A:A替换为对应日期列的列标即可。
方案二:Google Apps Script实现(高扩展性)
- 适用场景:后续需要扩展ID重复告警、数据合法性校验、跨表同步等定制逻辑
- 操作方式:
- 打开表格,点击顶部菜单栏「扩展程序」→「Apps Script」进入脚本编辑器
- 清空编辑器内默认代码,粘贴以下代码后保存,按提示完成账号授权:
function onEdit(e) { const activeSheet = e.source.getActiveSheet(); const row = e.range.getRow(); // 跳过表头行,可根据实际表头位置调整阈值 if (row < 2) return; // 列号配置:A列=1,S列=19,T列=20,U列=21,可按实际表结构修改 const COL_DATE = 1, COL_SIZE = 19, COL_CARRIER = 20, COL_TRIP_ID = 21; // 读取当前行必填参数,缺值则不生成ID const dateVal = activeSheet.getRange(row, COL_DATE).getValue(); const sizeVal = activeSheet.getRange(row, COL_SIZE).getValue(); const carrierVal = activeSheet.getRange(row, COL_CARRIER).getValue(); if (!dateVal || !sizeVal || !carrierVal) return; // 拼接ID前缀:承运商+车型数字+格式化日期 const sizeNum = sizeVal.replace(/[A-Z-]/g, ""); const dateStr = Utilities.formatDate(new Date(dateVal), Session.getScriptTimeZone(), "ddMMyy"); const idPrefix = `${carrierVal}${sizeNum}${dateStr}`; // 计算当日同维度行程序号 const existIds = activeSheet.getRange(2, COL_TRIP_ID, row - 2, 1).getValues().flat(); let seq = 1; existIds.forEach(id => id?.toString().startsWith(idPrefix) && seq++); const finalId = `${idPrefix}${seq.toString().padStart(2, "0")}`; // 写入ID到U列 activeSheet.getRange(row, COL_TRIP_ID).setValue(finalId); }
- 授权完成后回到表格,正常录入日期、车型、承运商信息即可,U列会自动触发生成对应唯一Trip ID。
内容的提问来源于stack exchange,提问作者S. Shotez
相关产品推荐
相关产品推荐

