如何检查重复项,仅在google-app-scripts中附加唯一值?

问题描述 投票:1回答:1

我有下面的代码,可以帮助我从sheet1中获取数据并将其粘贴到Sheet2中

function HubArchive() 
{
  var sourceSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1");
  var sourceData = sourceSheet.getDataRange().getValues();
  sourceData.splice(1,0);  // Remove header
  var rows = sourceSheet.getDataRange();
  var data = rows.getValues();
  var targetData = [];

  for (var i in sourceData) {
  if (sourceData[i][3] !== null && sourceData[i][3] !== 'test') {
    targetData.push(sourceData[i]);
  }
}
  var targetSS = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet2");
  var targetRangeTop = targetSS.getLastRow(); // Get # rows currently in target
     targetSS.getRange(targetRangeTop+1,1,targetData.length,targetData[0].length).setValues(targetData);

}

但是,我正在寻找一种方法来使代码检查Sheet2中的现有值,并仅追加任何新值,而不是再次复制任何重复项。关于我可以添加哪些内容的任何建议,以使其检查重复项并仅附加唯一行?

google-apps-script
1个回答
0
投票

您可以在indexOfarray.push()join的帮助下进行操作。

示例:

function HubArchive() {
  var sourceSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1");
  var sourceData = sourceSheet.getDataRange().getValues();
  sourceData.splice(1,0);  // Remove header
  var rows = sourceSheet.getDataRange();
  var data = rows.getValues();
  var targetSS = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet2");    
  var targetData =targetSS.getDataRange().getValues();
  var targetRowArray=[];
  for(var i=0;i<targetData.length;i++){
    targetRowArray.push(targetData[i].join(","));
   }
  targetData=[];
  for (var i in sourceData) {
    if (sourceData[i][3] !== null && sourceData[i][3] !== 'test'&&targetRowArray.indexOf(sourceData[i].join(","))==-1) {
      targetData.push(sourceData[i]);
    }
  }
  var targetRangeTop = targetSS.getLastRow(); // Get # rows currently in target
  targetSS.getRange(targetRangeTop+1,1,targetData.length,targetData[0].length).setValues(targetData);
}
© www.soinside.com 2019 - 2024. All rights reserved.