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

Google Sheets自动生成序号遇去重脚本清除公式问题求助

解决Google Sheets去重后工单号公式消失的问题

Hey there! 作为刚接触Google Apps Script的新手,碰到这种公式被脚本覆盖的问题太正常了——咱们先拆解下原脚本的问题,再给你两个靠谱的解决方案。

原脚本为啥会弄丢公式?

你的去重脚本用了getValues()获取单元格计算后的值,而不是单元格里的公式;之后又用sheet.clearContents()清空整个表格,最后用setValues()把处理后的静态值写回去。这就相当于把所有公式都转换成了固定数字,自然会导致E列的序号公式消失。

方案1:直接删除重复行(推荐!)

这种方法不会清空整个表格,只是删掉重复的行,能完美保留E列的公式,而且逻辑更简单。脚本会从下往上遍历行(避免删除行后索引混乱),用姓名(A列)和城市(B列)作为去重判断条件,和你原脚本的逻辑一致:

function removeDuplicates() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var data = sheet.getDataRange().getValues();
  var seen = new Set(); // 用来存储已经出现过的姓名+城市组合

  // 从最后一行往上遍历,删除重复行时不会打乱前面的索引
  for (var i = data.length - 1; i >= 0; i--) {
    var row = data[i];
    // 用"|"分隔避免姓名和城市拼接后冲突(比如姓名"张三"城市"北京" vs 姓名"张三北"城市"京")
    var uniqueKey = row[0] + "|" + row[1];
    
    if (seen.has(uniqueKey)) {
      // 注意:表格行号从1开始,所以要加1
      sheet.deleteRow(i + 1);
    } else {
      seen.add(uniqueKey);
    }
  }
}

配合更省心的E列序号公式

如果你的E列还在用手动下拉的公式,推荐换成数组公式,一次设置自动填充:
在E2单元格输入:
=ARRAYFORMULA(IF(A2:A="","",ROW(A2:A)-1))
这个公式会自动为A列有内容的行生成连续序号,删除重复行后序号会自动更新,不用再手动调整。

方案2:保留公式的清空重写法

如果你习惯原脚本的清空重写逻辑,也可以先保存E列的公式,处理完去重后再把公式恢复回去:

function removeDuplicatesWithFormulaPreserve() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var dataRange = sheet.getDataRange();
  var allValues = dataRange.getValues();
  // 获取E列(第5列,索引从0开始是4)从第2行开始的公式
  var eColumnFormulas = sheet.getRange(2, 5, allValues.length - 1, 1).getFormulas();

  var newData = [];
  var seen = new Set();
  for (var i = 0; i < allValues.length; i++) {
    var row = allValues[i];
    var uniqueKey = row[0] + "|" + row[1];
    if (!seen.has(uniqueKey)) {
      seen.add(uniqueKey);
      newData.push(row);
    }
  }

  // 清空表格内容
  sheet.clearContents();
  // 写入去重后的数值
  sheet.getRange(1, 1, newData.length, newData[0].length).setValues(newData);
  // 恢复E列的公式(如果有数据行的话)
  if (newData.length > 1) {
    sheet.getRange(2, 5, newData.length - 1, 1).setFormulas(eColumnFormulas.slice(0, newData.length - 1));
  }
}

注意事项

  • 不管用哪种方案,先备份你的表格再测试脚本,避免数据意外丢失;
  • 测试时可以先复制几行数据做小范围验证,没问题再用在整个表格;
  • 如果你的序号公式不是基于ROW()的,方案2可能需要调整公式的引用,建议优先用方案1。

内容的提问来源于stack exchange,提问作者Daniel Hoong

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 18:07:28