#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:
Вы можете сделать это довольно легко, не прибегая к скрипту, использующему встроенные функции:
- Используйте a
VLOOKUP
для поиска экземпляров B:B в A:A:
= VLOOKUP(B: B, A: A, 1, FALSE)
- Удалите нежелательные / не результаты:
=IF(ISERROR(VLOOKUP(B: B,A: A,1, FALSE)),B:B,)
- Получайте
UNIQUE
только результаты и удаляйте пробелы,SORT
редактируя список:
=СОРТИРОВКА(УНИКАЛЬНАЯ(IF(ISERROR(VLOOKUP(B: B,A:A,1, FALSE)),B:B,)),1,TRUE)