Existe-t-il un moyen de récupérer une colonne dynamiquement par son nom de colonne (en-tête)?
Au lieu de:
var values = sheet.getRange(sheet.column.getHeader("name").getValues();
Quelque chose comme: (Juste pour simplifier)
var values = sheet.getRange("A:A").getValues();
N'oubliez pas que Google Apps Script est à peu près ES3.
3 Réponses :
Bien qu'il n'y ait pas de moyen direct, il existe de nombreuses façons d'obtenir ce que vous voulez avec une petite configuration:
SpreadsheetApp.getActive()
.createDeveloperMetadataFinder()
.withKey(/*METADATA_KEY_ASSOCIATED_WITH_COLUMN*/)
.find()[0]
.getLocation()
.getColumn()
.getValues();
Si vous avez nommé des plages associées à cette colonne,
spreadsheet.getRangeByName('Sheet Name!name').getValues();//where 'name' is a named range
Si des métadonnées de développeur sont associées à cette colonne,
var values = sheet.getDataRange().getValues();
var headers = values.splice(0,1);
headerIdx = headers[0].indexOf("name");
values = values.map(function(row){return [row[headerIdx]];})
Vous pouvez en écrire un;)
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();
}
Voici une fonction en une ligne très simple que vous pouvez copier. Il renvoie le numéro de colonne (A = 1, B = 2, etc.) à utiliser dans getRange , par exemple.
function getColByHeader(name) {
return SpreadsheetApp.getActiveSheet().getRange('1:1').getValues()[0].indexOf(name) + 1;
}