Как установить значения в новом столбце с проверкой из именованного диапазона? - PullRequest
0 голосов
/ 19 апреля 2020

После предыдущего вопроса

Я хочу классифицировать текстовые записи, добавив тег в следующий столбец.

Я мог бы сделать это с помощью регулярных выражений, но это займет слишком много времени для написания всех условий, таких как:

 if(String(data[i][0]).match(/acme|brooshire|dillons|target|heb|costco/gi))
      {
         labValues[i][0]='Supermarket';
    }

Вместо этого я создал именованный список со всеми именами магазинов (на другом листе).

Если запись соответствует термину в списке, следующий столбец установлен на " Супермаркет ".

Я использую этот скрипт ниже ... Никаких ошибок, но ничего не происходит при выполнении!

 function tagStore() {
 var sheet = SpreadsheetApp.getActiveSheet();
 var range = sheet.getRange('A2:A655')
 var store = range.getValues();
 var tag = sheet.getRange('B2:B655');
 var tagvalues= tag.getValues();
 var storeList= SpreadsheetApp.getActive().getRangeByName("store_list");

  for (var i = 0; i<store.length; i++) 
  {
      if(String(store[i][0]).match(storeList))
      {
         tagvalues[i][0]='Supermarket';
      }
      }
  tag.setValues(tagvalues);  
}

Редактировать:

Важно использовать Regex, так как значения "store" не совсем совпадают с "store_list".

Store Values : ["Acme Store", "HEB PLaza", "Dillons Group"...]

Store_List : [acme, heb, dillons...]

1 Ответ

1 голос
/ 19 апреля 2020

Вместо того, чтобы пытаться go с помощью подхода regEx, есть более простой подход, извлекая диапазон в виде списка.

// For a Column
var storeList = SpreadsheetApp.getActive().getRangeByName("store_list").getValues().map(function(r){return r[0];});

// For a Row
var storeList = SpreadsheetApp.getActive().getRangeByName("store_list").getValues()[0];

И затем посмотрите, находятся ли искомые значения в этом список с indexOf().

Попробуйте это:

function tagStore() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var range = sheet.getRange('A2:A655')
  var store = range.getValues();
  var tag = sheet.getRange('B2:B655');
  var tagvalues= tag.getValues();
  var storeList= SpreadsheetApp.getActive().getRangeByName("store_list").getValues().map(function(r){return r[0];});//if it's a column
  //var storeList=SpreadsheetApp.getActive().getRangeByName("store_list").getValues()[0];//if it's a row
  for (var i=0;i<store.length; i++) {
    if(storeList.indexOf(store[i][0])!=-1) {
      tagvalues[i][0]='Supermarket';
    }
  }
  tag.setValues(tagvalues);  
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...