Получить ячейку по значению - PullRequest
0 голосов
/ 21 октября 2018

Как получить диапазон ячейки, используя ее значение и столбец ?

Скажите, у меня есть этот столбец:

[   ][   A   ]
[ 1 ][ hello ]
[ 2 ][ world ]
[ 3 ][ waaah ]
[ 4 ][ waaah ]
[ 5 ][ waaah ]
Sheet: WALUIGI_SAYS_"HI"

Я хочу найти первый экземпляр waaah.Я знаю, что он находится в столбце A, но строку не знаю.

Как найти его в скриптах приложений?

1 Ответ

0 голосов
/ 21 октября 2018

Есть, по крайней мере, 3 способа выполнить то, что вы просите.

  1. Вручную поместите формулу, например =MATCH("waaah",A1:A5,0), в ячейку, чтобы прочитать значение этой ячейки в скрипте.

  2. Поместите формулу в ячейку из сценария и прочитайте, как указано выше.

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

РЕДАКТИРОВАТЬ: Добавлен пример кода для ясности с каждым продемонстрированным методом.

/**
 * Finds first matching row in a column
 * @customfunction
 */
function findFirstMatchingRow() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getActiveSheet();

  //Method 1 - Formula manually placed in B1
  var row = sheet.getRange("B1").getValue();
  if (row=="#N/A"){
      Logger.log("NoMatch");  
  }else
  {
       Logger.log(row);  // shows 3
  }


  //Method 2 - Formula placed in B2 via script.
  row = sheet.getRange("B2").setFormula("=MATCH(\"waaah\",A1:A5,0)").getValue();
   if (row=="#N/A"){
      Logger.log("NoMatch");  
  }else
  {
       Logger.log(row);  // shows 3
  }

  //Method 3 - Make your own search loop
  // first load the values into an array (in one trip to the server)
  var valuesArray = sheet.getRange("A1:A5").getValues();
  var lengthOfArray = valuesArray.length;
  var matchFound = false;
  var n;

  for (n=0; n<lengthOfArray; n++){   // loop through the values looking for a match
      if (valuesArray[n] == "waaah")
      {
        matchFound=true;
        n++;                        // add one because arrays start at 0 not
        break;
      }
  }
  if (matchFound){
    Logger.log(n);    // shows 3
  }
  else {
    Logger.log("No match");
  }

}

Производит этот вывод журнала:

[18-10-22 08:43:49:917 HKT] 3.0
[18-10-22 08:43:50:176 HKT] 3.0
[18-10-22 08:43:50:300 HKT] 3.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...