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; }