Скрипт Google Apps для определения различий между двумя столбцами таблицы Google, игнорируя пустые ячейки и несколько экземпляров

#javascript #excel #google-apps-script

#javascript #excel #google-apps-script

Вопрос:

Я начинающий разработчик JavaScipt, и мне нужна помощь в следующей ситуации:

У меня есть два столбца данных («СТОЛБЕЦ A» и «СТОЛБЕЦ B») в Таблицах Google, где каждая ячейка содержит названия продуктов, но «СТОЛБЕЦ B» также содержит пустые ячейки (которые я хотел бы пропустить при поиске и сопоставлении), и это выглядит так:

«СТОЛБЕЦ A» «СТОЛБЕЦ B»

  Product1        Product89
 Product2        Product1 
 Product3        Product20
 Product4
 Product5        Product4
 Product6        
 Product7        Product6
 Product8        Product89
 PRoduct9
 Product10       Product15
 Product11       Product89
 

ПРОБЛЕМА: я хочу создать функцию поиска и сопоставления, которая работает для этих двух столбцов и определяет продукты из «СТОЛБЦА B», которых НЕТ в «СТОЛБЦЕ A», и перечисляет их в третьем столбце без пустых ячеек и только по одному экземпляру каждого продукта (если их более одногопродукты с одинаковым именем в «СТОЛБЦЕ B», которых нет в «СТОЛБЦЕ A»).

Результат для приведенного выше примера будет:

«СТОЛБЕЦ C (РЕЗУЛЬТАТ)»

      Product89
     Product20
     Product15
 

Любая помощь очень ценится!

Заранее спасибо!

Ответ №1:

я создаю сценарий для вас, проблема.

Я надеюсь, что он сможет помочь вам в вашем проекте.

         function myFunction() {
    var sheet = SpreadsheetApp.openById("id");
    var myArrayA ;
    var myArrayB ;
    var myArrayC ;
    var control = false;
    var controlC = false;
    var indic = 0;
    var i;
    var a;

    var c;
      sheet.getRange("C:C").clear();
       myArrayA = sheet.getRange("A:A").getValues(); 
       myArrayB = sheet.getRange("B:B").getValues(); 
       myArrayC = sheet.getRange("C:C").getValues();


      Logger.log(myArrayA[0][0]);

        for ( i = 0 ; i<= 10 ; i  )
        {

              for ( a = 0 ; a <= 10; a  )
                {

                    if (myArrayB[i][0] == myArrayA[a][0] amp;amp; myArrayB[i][0] != "")


 {

                  control = true;        
                }           
            }

          if ( control == false )
          {





             for ( b=0; b <= 10 ; b  )
             {
               if ( myArrayC[b][0] == myArrayB[i][0] amp;amp; myArrayC[b][0] != ""){
                 controlC = true;
               }

             }

             if ( controlC == false){

             myArrayC[indic][0] = myArrayB[i][0];
             indic = indic   1;
             }


          }

          control = false;
          controlC = false;

    }




  sheet.getRange("D:D").setValues(myArrayC);
}
 

Комментарии:

1. Не очень хорошая идея отвечать на эти вопросы типа «вот моя спецификация, напишите ее»

2. Большое спасибо, Ханн, ваш скрипт дал решение моей проблемы, хотя он не пропускает пустые ячейки, как и мой скрипт. Ваше решение более эффективно и намного быстрее, чем мое.

3. Если вы можете, пожалуйста, проверьте предоставленный скрипт еще раз, потому что я не могу найти проблему, при которой пустые ячейки регистрируются в myArrayC. Столбец результатов также содержит пустые ячейки…

4. вы можете просто создать другой массив. Скопируйте результат в новый массив без пустых ячеек.

Ответ №2:

Вы можете сделать это довольно легко, не прибегая к скрипту, использующему встроенные функции:

  1. Используйте a VLOOKUP для поиска экземпляров B:B в A:A:
= VLOOKUP(B: B, A: A, 1, FALSE)
  1. Удалите нежелательные / не результаты:
=IF(ISERROR(VLOOKUP(B: B,A: A,1, FALSE)),B:B,)
  1. Получайте UNIQUE только результаты и удаляйте пробелы, SORT редактируя список:
=СОРТИРОВКА(УНИКАЛЬНАЯ(IF(ISERROR(VLOOKUP(B: B,A:A,1, FALSE)),B:B,)),1,TRUE)