web-dev-qa-db-fra.com

Comment appliquer un script à une seule feuille de la feuille de calcul?

J'ai un tableur avec deux feuilles appelées Robin et Lucy. J'ai créé/trouvé/altéré un script pour trier les données de la feuille chaque fois que j'ajoute des données à la colonne A:

function onEdit(event){

  var sheet = event.source.getActiveSheet();
  var editedCell = sheet.getActiveCell();

  var columnToSortBy = 1;
  var tableRange = "a2:I30";
    if(editedCell.getColumn() == columnToSortBy){   
   var range = sheet.getRange(tableRange);
   range.sort( { column : columnToSortBy } );
  }
}

Ce script fonctionne bien mais je veux seulement qu'il soit appliqué sur la première feuille, Robin. Les données de la deuxième feuille, Lucy, ne sont pas les mêmes et je vais donc créer un autre script pour une plage différente pour celle-ci, une fois que je me suis concentré sur ce problème.

Je pense que j'ai besoin d'utiliser la getSheetByName("Robin") mais je n'arrive pas à le faire fonctionner.

8
oohrogerplamer

Il y a deux façons de le faire. Tout d'abord, vous devez déclarer le tableur:

var ss = SpreadsheetApp.getActiveSpreadsheet();  

Deuxièmement, déclarez la première feuille comme ceci:

var sh0 = ss.getSheets()[0];

ou comme ceci:

var sh0 = ss.getSheetByName("Robin");

Puis définissez la cellule active et récupérez l'index de la colonne:

var editedCell = sh0.getActiveRange().getColumnIndex();

Et faire la logique pour le genre:

var columnToSortBy = 1;
var tableRange = "a2:I30";

if(editedCell == columnToSortBy){   
  var range = sheet.getRange(tableRange);
  range.sort( { column : columnToSortBy } );
}

Code complet, un peu raccourci:

function onEdit(){
  var sh0 = SpreadsheetApp.getActiveSpreadsheet().getSheets()[0];
  var editedCell = sh0.getActiveRange().getColumnIndex();

  if(editedCell == 1) { 
    var range = sh0.getRange("A2:I30");
    range.sort({column: 1});
  }
}
11
Jacob Jan Tuinstra

Obtenez la feuille associée (feuille de calcul) et indiquez sur quel onglet (feuille) vous souhaitez mettre le focus:

var theSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Robin");
// do the thing
var theSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Lucy"); 
// do the other thing

Référence: https://developers.google.com/apps-script/reference/spreadsheet/spreadsheet#getSheetByName (String)

1
Andy Roberts