#javascript #arrays #multidimensional-array #google-apps-script #google-sheets
#javascript #массивы #многомерный массив #google-apps-script #google-sheets
Вопрос:
Есть ли способ динамически извлекать столбец по его имени столбца (заголовок)?
Вместо:
var values = sheet.getRange("A:A").getValues();
Что-то вроде: (просто для простоты)
var values = sheet.getRange(sheet.column.getHeader("name").getValues();
Пожалуйста, имейте в виду, что сценарий Google Apps примерно соответствует ES3.
Ответ №1:
Вы можете написать один 😉
function getColValuesByName(sheet, name) {
var index = sheet.getRange(1,1,1,sheet.getLastColumn()).getValues()[0].indexOf(name);
index ;
return sheet.getRange(1,index,sheet.getLastRow(),1).getValues();
}
Комментарии:
1. Это должно быть
sheet.getLastRow() - 1
Ответ №2:
Вот очень простая однострочная функция, которую вы можете скопировать. Он возвращает номер столбца (A = 1, B = 2 и т.д.) Для использования getRange
, например.
function getColByHeader(name) {
return SpreadsheetApp.getActiveSheet().getRange('1:1').getValues()[0].indexOf(name) 1;
}
Ответ №3:
Хотя прямого способа нет, есть много способов получить то, что вы хотите, с небольшой настройкой:
- Получить все данные и отфильтровать их (без настройки):
var values = sheet.getDataRange().getValues();
var headers = values.splice(0,1);
headerIdx = headers[0].indexOf("name");
values = values.map(function(row){return [row[headerIdx]];})
- Настройка именованных диапазонов:
Если у вас есть именованные диапазоны, связанные с этим столбцом,
spreadsheet.getRangeByName('Sheet Name!name').getValues();//where 'name' is a named range
- Настройка метаданных разработчика:
Если у вас есть метаданные разработчика, связанные с этим столбцом,
SpreadsheetApp.getActive()
.createDeveloperMetadataFinder()
.withKey(/*METADATA_KEY_ASSOCIATED_WITH_COLUMN*/)
.find()[0]
.getLocation()
.getColumn()
.getValues();