如何在一列中查找/删除重复的电子邮件地址?

时间:2014-07-30 18:59:28

标签: google-apps-script

我有一个包含多个列的文件,其中一列有人员电子邮件地址。有没有办法不止一次地搜索列中的任何电子邮件地址?

我可以尝试按字母顺序列出它们,但在某些单元格中有多个电子邮件地址,所以如果没有先列出,...

我只是想确保同一个人/电子邮件地址未列出两次。

现在,如果使用公式指示这样做,您能否具体说明我需要采取的步骤?我从不使用公式而且对于它们如何工作以及不同的代码意味着什么是天真的。

包含电子邮件地址的列是Z列,大约有2200行。

1 个答案:

答案 0 :(得分:0)

正如Joe T在评论中所说的那样,你必须很幸运能找到能为你编写代码的人,而且他是对的,所以不是要求现成代码的地方,但是因为" 在电子表格中复制"可能是多年来最受欢迎的主题,因为你的用例引入了一个新参数(单元格中的多个值),我发现它可能值得给你一个提示。

由于我不想花很多时间在这上面,所以我保持简单明了,只走了一半......(可能会增强并可能有一些弱点)

此脚本在您的SS中添加一列,并在每个有重复的行中写入X

它不会删除任何内容,因为我认为当其中一个项目有多个电子邮件而另一个项目有一个(或另一个但具有共同值...)时,无法决定删除哪一个,所以你会必须决定你删除哪一个,但X一定会有所帮助! (在AA栏上排序,以使其更加轻松!)

以下代码:

function highlightDuplicates() {
  var sh = SpreadsheetApp.getActive().getActiveSheet();
  sh.insertColumnAfter(26).getRange(1,27).setValue('duplicates');
  var data = sh.getDataRange().getValues();
  data.shift();// remove headers from data
  data.sort(function (x,y){// sort on column Z
   var xp = x[25];
   var yp = y[25];
   return xp == yp ? 0 : xp < yp ? -1 : 1;
 });  
  for(var n in data){
    var row = data[n];
    var email = row[25]
    for(var d in data){
      if((data[d][25].indexOf(email)>-1 || email.indexOf(data[d][25])>-1) && d!=n){
        row[26]='X';// if common data, mark with X
      }
    }
    data[n]=row;// update date
  }
  sh.getRange(2,1,data.length,data[0].length).setValues(data);//update sheet
}

enter image description here