Как мога да проверя за дубликати в списък, преди да копирам елемент в нов лист?

Искам да копирам данни от един лист (Sheet1) в друг (Sheet2). Преди данните да се копират, искам да проверя в колона А и на двата листа за дубликати, така че да се копират само недубликатите. По-конкретно имам проблеми с писането на оператора IF и цикъла FOR, за да направя това.

Имам следния код и снимки по-долу:

    function Demo() {


  var Sheet1 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1");
  var Sheet2 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet2");
  var ColumntoSearch = 1;
  var LastRow = Sheet1.getLastRow();
  var LastRow2 = Sheet2.getLastRow();


  //Gets range and values to compare for duplicates
  var Range = Sheet1.getRange(2, ColumntoSearch,LastRow, 1); 
  var Values = Range.getValues();
  logger.log("The Values to transfer over are: " + Values);

  //Gets range and values to compare duplicates to
  var Range2 = Sheet2.getRange(5, 1, LastRow2, 1)
  var Values2 = Range2.getValues();
  logger.log("The Values to Search are: " + Values2);

  //Sets the amount of data to copy over
  var NumberofColumns = 2;
  var NumberofRows = 1;

  var DestRow = Sheet2.getLastRow()+1;


  //Compares all the material codes for duplicates and copies over the non-duplicates
  var dt=new Date();
  var dv=new Date(dt.getFullYear(),dt.getMonth(),dt.getDate()).valueOf();
  var d=0;

   for(var i=0;i<Values.length;i++) {
    if((???????)) {
      var RangetoCopy=Sheet1.getRange(i-d+5,1,NumberofRows,NumberofColumns); 
      var DestRange=Sheet2.getRange(Sheet2.getLastRow()+1,1,NumberofRows,NumberofColumns);
      RangetoCopy.copyTo(DestRange);
        d++;}}
  Logger.log("Next Destination Row: " + DestRow);

}

Изображение1Image2


person Elise    schedule 22.08.2019    source източник


Отговори (1)


Опитайте нещо подобно:

function checkForDupesAndCopy() {
  var ss=SpreadsheetApp.getActive();
  var sh1=ss.getSheetByName("Sheet1");
  var sh2=ss.getSheetByName("Sheet2");
  var ColumntoSearch = 1;
  var rg1=sh1.getRange(2,1,sh1.getLastRow()-1,1); //cola sheet1
  var vA1=rg1.getValues();
  var rg2=sh2.getRange(5,1,sh2.getLastRow()-4,1)
  var vA2=rg2.getValues();
  var vlist=vA2.map(function(r){return r[0];});
  var dt=new Date();
  var dv=new Date(dt.getFullYear(),dt.getMonth(),dt.getDate()).valueOf();
  for(var i=0;i<vA1.length;i++) {
    if(vlist.indexOf(vA1[i][0])==-1) {
      var RangetoCopy=sh1.getRange(i+2,1,1,2); 
      var DestRange=sh2.getRange(sh2.getLastRow()+1,1,1,2);
      RangetoCopy.copyTo(DestRange);
    }
  }
}

Забележка: Тествах това върху някои свои данни.

person Cooper    schedule 22.08.2019