2015-08-23 3 views
0

В настоящее время у меня есть код, который может получить номер строки ячейки, содержащей определенную строку. Вот пример кода:Поиск номера столбца ячейки с определенным значением

var ss = SpreadsheetApp.getActiveSheet(); 
var values = ss.getRange("B:B").getValues(); 
var i=j=firstrow=lastrow=0; 
for(i=0;i<values.length;i++) 
for(j=0;j<values[i].length;j++) { 
    if(values[i][j]==5100) firstrow=i+1; 
else if(values[i][j]=='EOL') lastrow=i-2; 
} 

мне было интересно, если это возможно, чтобы сделать что-то, как и выше, но для столбцов, что путь мой сценарий не развалится, если пользователь случайно переместить столбец.

+1

добро пожаловать в s.o. чтобы задать правильный вопрос, пожалуйста, включите вашу попытку сделать такую ​​модификацию и какие проблемы вы указали. в противном случае s.o. на самом деле не для этого. –

ответ

1

Итак, что делать, это использовать .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 на основе.

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

+0

Спасибо! Первый набор кодов дал мне именно то, что я искал! –

Смежные вопросы