首页 > 解决方案 > 在将项目复制到新工作表之前,如何检查列表中的重复项?

问题描述

我想将数据从一张(Sheet1)复制到另一张(Sheet2)。在数据复制之前,我想在两张纸上的 A 列中检查重复项,以便只复制非重复项。我特别难以编写 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);

}

图片1图片2

标签: google-apps-script

解决方案


尝试这样的事情:

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);
    }
  }
}

注意:我根据自己的一些数据对此进行了测试。


推荐阅读