按单元格的前20个字符定义重复行

时间:2017-06-30 20:07:35

标签: google-apps-script

我正在为Google电子表格运行一个基本的重复数据删除脚本,并遇到了障碍。我想根据我定义的列中的前20个字符,而不是列的全部内容来确定行是否重复。

我进行了多次搜索,但发现任何事情都没有发现。我一直在想办法删除前X个字符,但这对我没什么好处。

非常感谢任何帮助。



function removeDuplicates() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var data = sheet.getDataRange().getValues();
  var newData = new Array();
  for(i in data){
    var row = data[i];
    var duplicate = false;
    for(j in newData){
      if(row[0] == newData[j][0] && row[4] == newData[j][4]){
  duplicate = true;
}
    }
    if(!duplicate){
      newData.push(row);
    }
  }
  sheet.clearContents();
  sheet.getRange(1, 1, newData.length, newData[0].length).setValues(newData);
}




2 个答案:

答案 0 :(得分:1)

你几乎就在那里,如果你可以比较你的电子表格B列的前20个字符和保存的数组,你可以找到重复的。

  

substring()是您需要使用的功能

了解详情:https://www.w3schools.com/jsref/jsref_substring.asp

function removeDuplicates() 
{
  var sheet = SpreadsheetApp.getActiveSheet();
  var data = sheet.getDataRange().getValues();
  var newData = new Array();
  for(var i in data)
  {
    var row = data[i];
    var duplicate = false;
    for(var j in newData)
    {
    //row[1]=> column B value 
      if(row[1].substring(0,20) == newData[j][1].substring(0,20)){
        duplicate = true;
      }
    }
    if(!duplicate){
      newData.push(row);
    }
  }
  sheet.clearContents();
  sheet.getRange(1, 1, newData.length, newData[0].length).setValues(newData);
}

答案 1 :(得分:0)

首先,您需要一个数组,其中包含指定列

中所有值的前20个字符
var columnNumber = 2
var values = data.map(function(el){ 
    return /^.{0,20}/.exec(el[columnNumber + 1]).toString() 
})

然后,您想要浏览数组并查看是否存在重复的

for (var row = 1; row < values.length; row++){
    var dupIndex = values.indexOf(values[row],row + 1)
    if (~dupIndex)
    {
        Browser.msgBox("Row " + (row + 1) + " and Row " + (dupIndex + 1) + " are identical")
        // Act on the duplicate rows here
    }
}

我希望这至少可以给出一个好的起点,祝你好运!