Есть, по крайней мере, 3 способа выполнить то, что вы просите.
Вручную поместите формулу, например =MATCH("waaah",A1:A5,0)
, в ячейку, чтобы прочитать значение этой ячейки в скрипте.
Поместите формулу в ячейку из сценария и прочитайте, как указано выше.
Создайте свой собственный сценарий для обхода диапазона, проверяя наличиезначение соответствует в каждом месте.Увеличьте счетчик в каждом цикле и выйдите из цикла, когда совпадение найдено.Счетчиком будет индекс.
РЕДАКТИРОВАТЬ: Добавлен пример кода для ясности с каждым продемонстрированным методом.
/**
* 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