Google apps script 用单元格的前20个字符定义重复行

Google apps script 用单元格的前20个字符定义重复行,google-apps-script,Google Apps Script,我正在为谷歌电子表格运行一个基本的重复数据消除脚本,遇到了障碍。我想根据我定义的列中的前20个字符,而不是列的全部内容来判断行是否重复 我进行了多次搜索,甚至没有找到任何相近的内容。我一直想办法删除前X个字符,但这对我没有任何好处 非常感谢您的帮助 函数removeDuplicates(){ var sheet=SpreadsheetApp.getActiveSheet(); var data=sheet.getDataRange().getValues(); var newData=newa

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

我进行了多次搜索,甚至没有找到任何相近的内容。我一直想办法删除前X个字符,但这对我没有任何好处

非常感谢您的帮助

函数removeDuplicates(){
var sheet=SpreadsheetApp.getActiveSheet();
var data=sheet.getDataRange().getValues();
var newData=newarray();
对于(数据中的i){
var行=数据[i];
var duplicate=false;
对于(新数据中的j){
if(行[0]==newData[j][0]&行[4]==newData[j][4]){
重复=正确;
}
}
如果(!重复){
newData.push(行);
}
}
sheet.clearContents();
sheet.getRange(1,1,newData.length,newData[0].length).setValues(newData);

}
首先,您需要一个数组,该数组包含指定列中所有值的前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
    }
}
for(变量行=1;行

我希望这至少能给你一个好的起点,祝你好运

您就快到了,如果您可以将电子表格B列的前20个字符与保存的数组进行比较,您可以找到重复的字符

substring()是您需要使用的函数

阅读更多:


当前代码没有处理前20个字符。这就是我遇到的问题。这里的脚本可以工作,但使用每个单元格的全部内容来确定行是否重复。我需要能够将其限制为单元格的前20个字符,因为每个单元格的内容都附加了一个唯一的URL。这是我使用的电子表格:最终目标是仅根据B列中单元格的前20个字符确定重复行。太棒了!谢谢@理查德霍斯勒你可以把这记为答案:)
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);
}