Вернуть соответствующий столбец, используя Google Scrips и Regex - PullRequest
6 голосов
/ 08 октября 2019

Я работал над сценарием для моего листа google, который берет полную строку из ячейки и сравнивает ее со списком ключевых слов на втором листе, это должно вернуть номер столбца. Есть еще кое-что, но у меня возникли некоторые проблемы.

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

У меня есть ячейки в смещении листа "Tag's" ,. но он проверяет правильные диапазоны.

function returnTag(narration){
  var main = SpreadsheetApp.getActiveSpreadsheet();
  var tagsheet = main.getSheetByName('Tags');
  var numRows = tagsheet.getLastRow();
  var numCols = tagsheet.getLastColumn();
  var range = tagsheet.getRange(6, 2, numRows-5, numCols-1);
  var row;
  var col;

  for (var col = 1; col <= numCols-1; col++) {
    for (var row = 1; row <= numRows-5; row++) {
      var currentValue = range.getCell(row,col).getValue();
      var regExp = new RegExp("\b"+narration+"\b","gi");
      if(regExp.test(currentValue)) {
       return(col);
      }
      else{ }

    }          
  }   
}

Я ожидаю, что если я введу «В море много рыбы» в A2 первого листа, он вернет 2 в качестве ссылки на столбец, в которой был найденв A1 первого листа.

Я предоставил редактируемую копию листа ниже.

https://docs.google.com/spreadsheets/d/19FDT6ximWg4AcGzDTuqC4AYIW4MgXFwlUH0wYfGQi8s/edit?usp=sharing

Спасибо:)

1 Ответ

6 голосов
/ 08 октября 2019

Пара вещей:

  • new RegExp() должен содержать currentValue и проверять "повествование" (ваш исходный код делает обратное)
  • Вам не нужна граница слова \b в функции new RegExp()

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

function returnTag(narration){
  var main = SpreadsheetApp.getActiveSpreadsheet();
  var tagsheet = main.getSheetByName('Tags');
  var numRows = tagsheet.getLastRow();
  var numCols = tagsheet.getLastColumn();
  var range = tagsheet.getRange(6, 2, numRows-5, numCols-1);
  var row;
  var col;
  for (var col = 1; col <= numCols-1; col++) {
    for (var row = 1; row <= numRows-5; row++) {
      var currentValue = range.getCell(row,col).getValue();
      var regExp = new RegExp(currentValue,"gi");
      if(regExp.test(narration)) {
       return(col);
      }
      else{ }
    }          
  }   
}

Я обновил то же самое на листе, который имеетподелился тоже и теперь работает :)

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