首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >根据Google工作表中的2列删除重复

根据Google工作表中的2列删除重复
EN

Stack Overflow用户
提问于 2022-09-21 15:20:42
回答 2查看 59关注 0票数 0

此代码删除名为“接收号”的列名中的重复内容。

如果条件与重复的两列相匹配,如何修改此代码。(即收据号码栏和流动电话号码栏应同时重复)

代码语言:javascript
运行
复制
  function removeDuplicates() {
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getSheetByName("Records");
  var vA=sh.getDataRange().getValues();
  var hA=vA[0];
  var hObj={};
  hA.forEach(function(e,i){hObj[e]=i;});//header title to index
  var uA=[];
  var d=0;
  for(var i=0;i<vA.length;i++) {
    if(uA.indexOf(vA[i][hObj['Receipt Number']])==-1) {
      uA.push(vA[i][hObj['Receipt Number']]);
    }else{
      sh.deleteRow(i+1-d++);
    }  
  }
}

提前谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-09-22 00:13:47

我相信你的目标如下。

  • 您希望使用2列的条件移除重复的行。
  • 例如,当Receipt NumberMobile Number的列如下所示时,需要删除以下2行(4和5)。 1接收号码2 a2 b2 3 a3 b3 4 a2 b2 <--删除5 a3 b3 <--删除6 a2 b3 7 a3 b2

如果我的理解是正确的,下面的修改如何?在此修改中,使用了removeDuplicates

修改脚本:

代码语言:javascript
运行
复制
function removeDuplicates() {
  var checkHeadeTitles = ["Receipt Number", "Mobile Number"]; // This header titles are from your question.

  var ss = SpreadsheetApp.getActive();
  var sh = ss.getSheetByName("Records");
  var header = sh.getRange(1, 1, 1, sh.getLastColumn()).getValues()[0];
  var columnNumber = checkHeadeTitles.map(e => {
    var idx = header.indexOf(e);
    if (idx == -1) {
      throw new Error(`No header tilte of '${e}'.`);
    }
    return idx + 1;
  });
  sh.getRange(2, 1, sh.getLastRow() - 1, sh.getLastColumn()).removeDuplicates(columnNumber);

  var row = sh.getDataRange().getValues().findIndex(r => r.join("") == "");
  if (row == -1) return;
  sh.deleteRow(row + 1);
}
  • 当此脚本运行到上面的示例表时,第4行和第5行将被删除。

参考文献:

票数 2
EN

Stack Overflow用户

发布于 2022-09-21 16:29:59

代码语言:javascript
运行
复制
function removeDuplicates() {
  var ss = SpreadsheetApp.getActive();
  var sh = ss.getSheetByName("Records");
  var [hA, ...vA] = sh.getDataRange().getValues();
  var idx = {};
  hA.forEach(function (e, i) { idx[e] = i; });
  var uA = [];
  var d = 0;
  for (var i = 0; i < vA.length; i++) {
    let x = `${vA[i][idx['Receipt Number']]}-${vA[i][idx['Receipt Number']]}`
    if (!~uA.indexOf(x)) {
      uA.push(x);
    } else {
      sh.deleteRow(i + 2 - d++);
    }
  }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73803291

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档