Итак, что делать, это использовать .getRange("B:B")
, чтобы определить, что вы хотите все строки в столбце B. Затем с помощью getValues()
вернуть все эти строки в виде многомерного массива (очевидно, это будет только один столбец - так что вы, вероятно, t нужен другой для цикла).
Так вместо этого вы можете просто использовать .getRange(row, column)
(где row
и column
целые числа больше 1), таким образом, вы можете пройти через таблицу один пункт в то время, используя getValue()
. Таким образом, вы можете сначала просмотреть первую строку, чтобы найти индекс столбца, который вы используете, а затем посмотреть вниз по строкам, чтобы найти нужные вам данные.
Нечто подобное может работать для вас:
var ss = SpreadsheetApp.getActiveSheet();
var valueColumn;
for(i=1;i<ss.getLastColumn();i++) {
if (ss.getRange(1,i).getValue() == "ColumnName") {
valueColumn = i;
break;
}
}
//At this point I assume that we have a value in valueColumn, if not this won't work.
var values = ss.getRange(2, valueColumn, ss.getLastRow()).getValues();
var i=firstrow=lastrow=0;
for(i=0;i<values.length;i++) {
if(values[i][0]==5100) firstrow=i+1;
else if(values[i][0]=='EOL') lastrow=i-2;
}
Одна вещь, чтобы иметь в виду, что массивы 0 на основе которых, как getRange(row,column[,rows])
1 на основе.
Моя таблица очень маленькая, поэтому скорость выполнения одного вызова и получение всех данных минимальна, но если вы на самом деле используете большой лист, вы можете найти один метод, который работает быстрее другого.
добро пожаловать в s.o. чтобы задать правильный вопрос, пожалуйста, включите вашу попытку сделать такую модификацию и какие проблемы вы указали. в противном случае s.o. на самом деле не для этого. –