2015-04-26 2 views
0

У меня есть скрипт, который выполняет итерации по двум таблицам, находит повторяющиеся значения в столбце A, а затем добавляет строку этих дубликатов к другому листу.Изменение сценария для отправки не дублируемых значений на новый лист вместо повторяющихся значений

Я действительно хочу, чтобы этот скрипт выполнял аналогичную вещь, но добавляйте строки, которые не являются дубликатами, а не те, которые есть. Как я могу изменить его так, чтобы он посылал не дубликаты на лист «Новые ученики»? Я пытался изменить значение == на! == Но это отправляет весь список. Я искал вокруг какое-то время, и я знаю это, вероятно, легко исправить.
спасибо! Brandon

function compareandupdate() { 
    var s1 = SpreadsheetApp.openById("XXXXXX-vvxyewdki0J9tGqJl9_f-wZE0zOboQRIscLAA").getSheetByName('Updated Student List'); 
    var s2 = SpreadsheetApp.openById("XXXXXX-yB9Xm1J5RKWS7NF23vD-NTUeIgspbctj3leW4").getSheetByName('Master Student List'); 
    var s3 = SpreadsheetApp.openById("XXXXXX-yB9Xm1J5RKWS7NF23vD-NTUeIgspbctj3leW4").getSheetByName('New Students'); 

    var values1 = s1.getDataRange().getValues(); 
    var values2 = s2.getDataRange().getValues(); 
    var resultArray = []; 

for(var n=0; n < values1.length ; n++){ 
    var keep = false; 
    for(var p=0; p < values2.length ; p++){ 
     Logger.log(values1[n][0]+' =? '+values2[p][0]); 
     if(values1[n][0] == values2[p][0]){ 
     resultArray.push(values1[n]); 
     Logger.log('true'); 
     break ;// remove this if values are not unique and you want to keep all occurrences... 
     } 
    } 
    } 
    s3.getRange(+1,1,resultArray.length,resultArray[0].length).setValues(resultArray); 
} 

ответ

0

Если вы хотите сохранить существующую структуру (который я думаю, что я написал некоторое время назад ;-) и btw имеет ненужную переменную (keep)!) Вы можете использовать эту измененную версия вашего кода:

function compareAndUpdate() { 
    var s1 = SpreadsheetApp.openById("XXXXXX-vvxyewdki0J9tGqJl9_f-wZE0zOboQRIscLAA").getSheetByName('Updated Student List'); 
    var s2 = SpreadsheetApp.openById("XXXXXX-yB9Xm1J5RKWS7NF23vD-NTUeIgspbctj3leW4").getSheetByName('Master Student List'); 
    var s3 = SpreadsheetApp.openById("XXXXXX-yB9Xm1J5RKWS7NF23vD-NTUeIgspbctj3leW4").getSheetByName('New Students'); 

// var definition for easier testing purpose 
// var s1 = SpreadsheetApp.getActiveSpreadsheet().getSheets()[0]; 
// var s2 = SpreadsheetApp.getActiveSpreadsheet().getSheets()[1]; 
// var s3 = SpreadsheetApp.getActiveSpreadsheet().getSheets()[2]; 

    var values1 = s1.getDataRange().getValues(); 
    var values2 = s2.getDataRange().getValues(); 
    var resultArray = []; 

    for(var n=0; n < values1.length ; n++){ 
    var keep = true; 
    for(var p=0; p < values2.length ; p++){ 
     Logger.log(values1[n][0]+' =? '+values2[p][0]); 
     if(values1[n][0] == values2[p][0]){ 
     keep = false;// if same value in first column in s2 then don't keep (you can modify this condition to your needs, extend to whole row or other columns for example) 
     break; 
     } 
    } 
    if(keep){ 
     resultArray.push(values1[n]);// keep only values from s1 that are not in s2 
    } 
    } 
    s3.getRange(+1,1,resultArray.length,resultArray[0].length).setValues(resultArray); 
} 
+1

Большое спасибо, отлично работает! Я так много узнаю из ваших сценариев (как вы можете сказать) :-) Я очень ценю все время, которое вы принимаете, чтобы помогать другим в SO. – BrandonM

0

вы могли бы попробовать это

function contains(array, entry) { 
    for(var p=0; p < array.length ; p++){ 
    if(array[p][0] === entry){ 
     return true; 
    } 
    } 
    return false; 
} 

for(var n=0; n < values1.length ; n++) { 
    if(!contains(values2, values1[n][0])) { 
    resultArray.push(values1[n]); 
    } 
} 
Смежные вопросы