1
votes

Récupérer la colonne Google Sheets par nom d'en-tête

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.


0 commentaires

3 Réponses :


0
votes

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:

  • Récupérez toutes les données et filtrez-les (aucune configuration):
SpreadsheetApp.getActive()
    .createDeveloperMetadataFinder()
    .withKey(/*METADATA_KEY_ASSOCIATED_WITH_COLUMN*/)
    .find()[0]
    .getLocation()
    .getColumn()
    .getValues();
  • Plages nommées configurées:

Si vous avez nommé des plages associées à cette colonne,

spreadsheet.getRangeByName('Sheet Name!name').getValues();//where 'name' is a named range
  • Configuration des métadonnées du développeur:

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


0 commentaires

1
votes

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


0 commentaires

0
votes

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


0 commentaires