Извлечение столбца Google Sheets по имени заголовка

#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();