Google скрипты ищут столбцы идентификаторов для совпадений, а затем ищут столбцы для не совпадений - PullRequest
0 голосов
/ 09 января 2019

Здесь я пытаюсь сопоставить номер продукта, а затем выполнить поиск несоответствующих функций. Таким образом, в следующем примере мы видим в COL A-ID продукта, COL B-Features, COL C-ID продукта, COL D-Features. Я хочу сравнить столбцы A-B с столбцами C-D. Мне удалось сопоставить всю ячейку, но я хочу получить более детальное и сопоставить слова внутри ячейки. Итак, в приведенном ниже примере я хотел бы увидеть результаты для продукта 12345, потому что в нем отсутствует функция «Средний». Также мы получили бы результаты от 54321, так как отсутствует функция «хорошо».

COL A | COL B | COL C | COL D |
ID продукта | особенности | ID продукта | особенности
12345 | быстрый и медленный и средний | 12345 | медленно
12345 | быстро и медленно | 12345 | быстро
12345 | быстро и медленно | 12345 | быстро
54321 | трудно и хорошо | 12345 | жесткий
54321 | трудно и хорошо | 12345 | жесткий
12345 | быстро и медленно | 12345 | быстрый

Пример электронной таблицы: https://docs.google.com/spreadsheets/d/e/2PACX-1vRnVIHj8ekDOzYdFyv0PSGCynh91CPWiA5LxYV52McDH4nTsUp4faP7Iw6P44xG1HUavuwAT8wfXjaA/pubhtml?gid=0&single=true

Пока у меня есть следующий скрипт с 2 функциями, и он дает результаты, если ячейки имеют точный формат, а многие нет. Мне не нужны две функции, но это была моя попытка добиться этого.

Вопрос заключается в следующем: как сначала сопоставить столбцы A и C с точным соответствием, затем, если в столбце B есть слово, которого нет в столбце D, вывести результаты в COL E: F

Спасибо за любую помощь.

function checkProduct() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var s=ss.getSheetByName("A Data - Formatted")
  var lr=s.getLastRow()
  var lookup = s.getRange(2,1,lr-1,5).getValues();
  var s1=ss.getSheetByName("B Data - Formatted") 
  var lr1=s1.getLastRow()
  var range = s1.getRange(2,1,lr1-1,5).getValues();
  var s3=ss.getSheetByName("Matches")
  s3.getRange("A2:F").clear();
  var lookupRange = [];
  for (var i = 0; i < lookup.length; i++) {
     for (var j = 0; j < range.length; j++) {
     var  test=lookup[i][0]
         if(lookup[i][0]==range[j][0]){
           lookupRange.push([range[j][0],range[j][1],lookup[i][0],lookup[i][1],]);
     }}}
   s3.getRange(2,1,lookupRange.length,4).setValues(lookupRange); 
}
                             
function checknoMatch() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var s=ss.getSheetByName("Matches")
  var lr=s.getLastRow()
  var lookup = s.getRange(2,1,lr-1,2).getValues();
  var s1=ss.getSheetByName("Matches") 
  var lr1=s1.getLastRow()
  var range = s1.getRange(2,3,lr1-1,2).getValues();
  var s3=ss.getSheetByName("Differences")
   s3.getRange("A2:F").clear();
  var lookupRange = [];
  for (var i = 0; i < lookup.length; i++) {
     for (var j = 0; j < range.length; j++) {
     var  test=lookup[i][0]
         if(lookup[i][0] == range[j][0] && lookup[i][1] != range[j][1]){
           lookupRange.push([range[j][0],range[j][1],lookup[i][0],lookup[i][1],]);
     }}}
   s3.getRange(2,1,lookupRange.length,4).setValues(lookupRange); 
}

1 Ответ

0 голосов
/ 10 января 2019

Соответствует и не соответствует

function getMatching(){
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getActiveSheet();
  var rg=sh.getDataRange();
  var vA=rg.getValues();
  for(var i=1;i<vA.length;i++){
    if(vA[i][0]==vA[i][2]){
      vA[i][4]=vA[i][0];
      vA[i][6]=vA[i][3];
      vA[i][5]=getNonMatching({col2:vA[i][1],col4:vA[i][3]}); 
    }
  }
  sh.getRange(1,1,sh.getLastRow(),sh.getLastColumn()).setValues(vA);
}

function getNonMatching(sObj){
  if(sObj.col2 && sObj.col4){
    var vA2=sObj.col2.split(" ");
    var vA4=sObj.col4.split(" ");
    vA4.push('and');//You can push other insignificant word into vA4 to keep them out of the output string.
    var s='';
    var n=0;
    for(var i=0;i<vA2.length;i++){
      if(vA4.indexOf(vA2[i])==-1){
        if(n>0) {
          s+=' ';
        }
        s+=vA2[i];
        n++;
      }
    }
    return s;
  }else{
    return 'Error: Invalid Inputs';
  }
}

Таблица перед запуском:

enter image description here

Электронная таблица после запуска:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...