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

如何在Google Sheets中生成排序后仍不可变的自动SKU?

Google Sheets 生成不可变自动递增SKU解决方案

问题根源

你当前使用的=if($B2<>"",$B2 & TEXT(COUNTIF($B$2:$B2,$B2),"-0000"),"")公式依赖相对范围$B$2:$B2做动态计数,表格排序时行的相对位置变化会触发公式重算,导致SKU和对应商品的绑定关系错乱。

方案1:使用Apps Script自动生成固化SKU(推荐)

这个方案生成的SKU是静态文本值,排序、新增行都不会发生变更,完全符合需求:
操作步骤:

  1. 打开你的表格,点击顶部菜单栏「扩展程序」-「Apps Script」,清空默认代码,粘贴以下代码:
function generateFixedSKU(e) {
  const sheet = e.source.getActiveSheet();
  const targetColumn = 2; // B列为商品名称列,对应列号2
  const skuColumn = 1; // A列为SKU列,对应列号1
  const editedRow = e.range.getRow();

  // 仅当B列新增/修改内容、且对应A列无SKU时触发生成
  if (e.range.getColumn() == targetColumn && editedRow >= 2 && sheet.getRange(editedRow, skuColumn).getValue() == "") {
    const productName = e.value;
    // 统计当前该商品已有的SKU数量
    const allSKUs = sheet.getRange(2, skuColumn, sheet.getLastRow() - 1, 1).getValues().flat();
    const matchCount = allSKUs.filter(sku => sku.startsWith(productName + "-")).length;
    const newSKU = productName + "-" + String(matchCount + 1).padStart(4, '0');
    // 写入SKU到A列,是静态文本不会再变动
    sheet.getRange(editedRow, skuColumn).setValue(newSKU);
  }
}
  1. 保存代码,项目名可自定义填写,然后添加触发器:点击左侧闹钟图标「触发器」-「添加触发器」,选择要运行的函数为generateFixedSKU,事件来源选择「电子表格」,事件类型选择「编辑」,保存并按提示授权权限即可。
  • 效果说明:后续只要你在B列输入新的商品名称,脚本会自动在A列生成对应SKU,写入后就是纯文本,排序、修改其他列内容都不会变更SKU,新增行也会自动生成新的SKU。

方案2:公式方案(需开启迭代计算)

如果你不想使用脚本,可以通过开启迭代计算实现SKU生成后自动锁死:

  1. 点击顶部菜单栏「文件」-「设置」-「计算」,把「迭代计算」的开关打开,最大迭代次数设为1,保存设置。
  2. A2单元格输入以下公式,然后下拉填充到所有需要的行:
=IF(B2="","",IF(A2="",B2&TEXT(COUNTIFS(B$2:B2,B2,A$2:A2,"<>"),"-0000"),A2))
  • 注意事项:
    • 公式生成SKU后会自动保留已生成的值,不会因为排序重算变更,但如果清空A列单元格会重新触发计算
    • 新增行时只需要把公式下拉到新行即可

内容的提问来源于stack exchange,提问作者Michael Swarts

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 10:54:03