Cours Apps Script : les menus
Vous avez la possibilité de créer des menus personnalisés pour votre document Google Sheets.
Puis, lorsque vous cliquerez sur l'une des options du menu, la fonction correspondante sera alors exécutée.
Création d'un menu
La fonction qui va créer et afficher le menu n'a besoin d'être exécutée qu'une seule fois à l'ouverture du document, vous pouvez donc la placer dans la fonction onOpen pour utiliser ce déclencheur.
Dans cet exemple l'objectif sera de créer un menu qui va regrouper des fonctions de texte (ici pour convertir des cellules en majuscules ou en minuscules) :
function onOpen() {
SpreadsheetApp.getUi()
.createMenu('Texte')
.addItem('Convertir en majuscules', 'majuscules')
.addItem('Convertir en minuscules', 'minuscules')
.addToUi();
}
Dans createMenu, entrez le nom du menu à afficher :
.createMenu('Texte')
Et ajoutez un ou plusieurs choix dans le menu avec addItem (la première valeur est le nom du choix et la seconde le nom de la fonction à exécuter) :
.addItem('Convertir en majuscules', 'majuscules')
Exécutez ensuite la fonction onOpen pour afficher le menu :
Vous pouvez voir que le menu a bien été ajouté.
Il reste encore à ajouter les fonctions majuscules et minuscules qui auront pour but de convertir la cellule sélectionnée en majuscules ou en minuscules :
function majuscules() {
const celluleActive = SpreadsheetApp.getActiveSheet().getActiveCell();
celluleActive.setValue(celluleActive.getValue().toUpperCase());
}
function minuscules() {
const celluleActive = SpreadsheetApp.getActiveSheet().getActiveCell();
celluleActive.setValue(celluleActive.getValue().toLowerCase());
}
Après avoir enregistré les modifications, vous pourrez utiliser le menu ajouté pour convertir la valeur de la cellule active en majuscules ou en minuscules.
Pour aller un peu plus loin et rendre ces fonctions plus pratiques, il est possible d'appliquer ces modifications à une plage entière en récupérant les valeurs de la plage active et en utilisant la méthode map sur chaque ligne puis sur chaque valeur de la ligne :
function majuscules() {
const plageActive = SpreadsheetApp.getActiveSheet().getActiveRange();
plageActive.setValues(plageActive.getValues().map(ligne => ligne.map(valeur => valeur.toUpperCase())));
}
function minuscules() {
const plageActive = SpreadsheetApp.getActiveSheet().getActiveRange();
plageActive.setValues(plageActive.getValues().map(ligne => ligne.map(valeur => valeur.toLowerCase())));
}
Si vous n'êtes pas à l'aise avec les méthodes de tableau, vous pouvez également le faire avec des boucles for. En voici un exemple équivalent pour la fonction majuscules :
function majuscules() {
const plageActive = SpreadsheetApp.getActiveSheet().getActiveRange();
const valeursPlageActive = plageActive.getValues();
const nbLignes = valeursPlageActive.length;
const nbColonnes = valeursPlageActive[0].length;
for (let ligne = 0; ligne < nbLignes; ligne++) {
for (let colonne = 0; colonne < nbColonnes; colonne++) {
valeursPlageActive[ligne][colonne] = valeursPlageActive[ligne][colonne].toUpperCase();
}
}
plageActive.setValues(valeursPlageActive);
}
Ajout d'un sous-menu
Vous pouvez également ajouter des sous-menus en entrant addSubMenu puis le menu en argument.
En voici un exemple :
function onOpen() {
const ui = SpreadsheetApp.getUi();
ui.createMenu('Texte')
.addItem('Autre', 'autre')
.addSubMenu(ui.createMenu('Majuscules / minuscules')
.addItem('Convertir en majuscules', 'majuscules')
.addItem('Convertir en minuscules', 'minuscules'))
.addItem('Divers', 'divers')
.addToUi();
}
Ce qui nous donne ici :
Ajout d'un séparateur
Vous pouvez aussi ajouter des séparateurs pour séparer par exemple des groupes de fonctions avec addSeparator :
function onOpen() {
SpreadsheetApp.getUi()
.createMenu('Texte')
.addItem('Convertir en majuscules', 'majuscules')
.addItem('Convertir en minuscules', 'minuscules')
.addSeparator()
.addItem('Diviser en tableau', 'diviser')
.addItem('Joindre un tableau', 'joindre')
.addToUi();
}
Le menu :
Ajouter une icône
Si vous le souhaitez, vous pouvez ajouter un caractère spécial tel qu'un emoji directement dans le texte :
function onOpen() {
SpreadsheetApp.getUi()
.createMenu('Texte')
.addItem('🔺 Convertir en majuscules', 'majuscules')
.addItem('🔻 Convertir en minuscules', 'minuscules')
.addToUi();
}
Le menu :