Как проверить наличие дубликатов и добавлять уникальные значения только в google-app-scripts? - PullRequest
3 голосов
/ 07 октября 2019

У меня есть приведенный ниже код, который помогает мне взять данные из листа1 и вставить их в Лист2

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

}

Тем не менее, я ищу способ для кода проверить существующие значения в Листе2 и добавить тольколюбые новые вместо того, чтобы копировать любые дубликаты снова. Любые предложения о том, что я мог бы добавить, чтобы он проверял дубликаты и добавлял только уникальные строки?

1 Ответ

1 голос
/ 07 октября 2019

Вы можете сделать это с помощью indexOf , array.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]);
    }
  }
if(targetData.length>0){ 
 var targetRangeTop = targetSS.getLastRow(); // Get # rows currently in target 
 targetSS.getRange(targetRangeTop+1,1,targetData.length,targetData[0].length).setValues(targetData);
 }
}

Если вы хотите сравнить только первый столбец, вы можете заменить [i].join(",") на [i][0]:

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][0]);
   }
  targetData=[];
  for (var i in sourceData) {
    if (sourceData[i][3] !== null && sourceData[i][3] !== 'test'&&targetRowArray.indexOf(sourceData[i][0])==-1) {
      targetData.push(sourceData[i]);
    }
  }
  if(targetData.length>0){
  var targetRangeTop = targetSS.getLastRow(); // Get # rows currently in target
  targetSS.getRange(targetRangeTop+1,1,targetData.length,targetData[0].length).setValues(targetData);
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...