Ressources Google Apps Script
Tuto 4 : mettre en valeur des données d’un tableau et autres mises en forme
Manipuler des données contenues dans une feuille de calcul
Dans le chapitre précédent nous avons vu comment ajouter un menu personnalisé à un document Google de type texte.
Nous verrons ici comment faire de même dans un tableur et nous en profiterons pour apprendre les fonctions basiques de manipulation de données d'une feuille de calcul.
Pour les besoins du tutoriel il nous faut créer un nouveau document de type tableur au sein de Google Drive via un clic droit « Google Sheets ». Nous l’appellerons rapport_piscine. Comme dans l'ensemble de la suite Google la manière d'accéder à l’éditeur de code Google Apps Script est la même : menu Extensions de la barre latéral et choisir « Apps Script ».
Ajouter le menu
Nous utiliserons la classe createMenu() pour construire un objet menu et créer des raccourcis pour lancer nos fonctions.Afin de rendre le menu disponible à l’ouverture du document nous lancerons la fonctions ajouterMenu() via la fonction automatiquement exécutée au lancement onOpen().
function onOpen(){
//Ajouter un menu
ajouterMenu();
}
Passons maintenant au code de construction du menu comme vu dans le tutoriel 3.
function ajouterMenu(){
SpreadsheetApp.getUi()
.createMenu('Utiles')
.addItem('Catégories pH', 'analyserpH')
.addToUi();
}
function analyserpH() {
//Fonction à écrire
}
Vous avez peut-être remarqué une légère différence entre le code du tutoriel 3 et celui-ci en ce qui concerne la fonction pour insérer un menu ; nous appelions DocumentApp pour le document texte et ici nous faisons appel à SpreadsheetApp pour le tableau de Google. Attention donc si vous manipulez ces deux types de fichier et que vous réutilisez du code.
Notre tableau contiendra les relevés de pH des piscines municipales de la semaine. Nous automatiserons la catégorisation du pH et nous mettre en évidence les bassins qui sont hors normes depuis 3 jours de suite.
Pour ce faire, nous devons créer un tableau très basique.
Voici le déroulé de ce que devra faire notre fonction analysepH() :
- Cibler le tableau actuellement ouvert : SpreadsheetApp.getActive()
- Se concentrer sur la première feuille de calcul : .getSheets()[0]
- Récupérer les données ligne par ligne en ignorant les entêtes et la première colonne : .getRange(2, 2, sheet.getLastRow(),sheet.getLastColumn()).getValues();
Avant la fonction onOpen() créons nos constantes pour diviser le pH en 3 groupes de couleur pour la valeur du tableau :
const acide = '#bf1922';
const neutre = '#659c4b';
const basique = '#213a7b';
Notre fonction aura pour rôle de changer la couler du texte selon si le pH est acide, neutre ou basique
function analyserpH(){
const ss = SpreadsheetApp.getActive(); //Ciblage du tableau actuellement ouvert
const sheet = ss.getSheets()[0]; //Ciblage de la première feuille de calcul
const data = sheet.getRange(2, 2, sheet.getLastRow(),sheet.getLastColumn()).getValues(); //Obtention des données des lignes et colonnes en évitant la colonne du nom des piscines et les entêtes
for(let x=0;x 7){
sheet.getRange((x+2), (i+2)).setFontColor(basique);
}else{
sheet.getRange((x+2), (i+2)).setFontColor(neutre);
}
}
}
}
Nous avons vu la fonction setFontColor pour définir la couleur du texte. Voici une liste de fonctions usuelles pour modifier du texte :
- Passer du texte en gras : setFontWeight('bold')
- Définir la couleur du fons : setBackground('yellow')
- Mettre le texte en italique : setFontStyle('italic')
- Retirer l’italique : setFontStyle('normal')
Terminons notre code en ajoutant des instructions pour mettre en gras le nom d’une piscine qui a plus de trois valeurs non conformes pour son pH. Voici le code final :
const acide = '#bf1922';
const neutre = '#659c4b';
const basique = '#213a7b';
function onOpen(){
//Ajouter un menu
ajouterMenu();
}
function ajouterMenu(){
SpreadsheetApp.getUi()
.createMenu('Utiles')
.addItem('Catégories pH', 'analyserpH')
.addToUi();
}
function analyserpH(){
const ss = SpreadsheetApp.getActive(); //Ciblage du tableau actuellement ouvert
const sheet = ss.getSheets()[0]; //Ciblage de la première feuille de calcul
const data = sheet.getRange(2, 2, sheet.getLastRow(),sheet.getLastColumn()).getValues(); //Obtention des données des lignes et colonnes en évitant la colonne du nom des piscines et les entêtes
const piscines = sheet.getRange(2, 1, sheet.getLastRow()).getValues(); // Lister les piscines
const defauts = {}; // Créer un tableau avec une entrée par piscine
for (let x = 0; x < piscines.length; x++) {
defauts[x] = 0;
}
for(let x=0;x 7){
sheet.getRange((x+2), (i+2)).setFontColor(basique);
defauts[[x]] = defauts[[x]] + 1;
}else{
sheet.getRange((x+2), (i+2)).setFontColor(neutre);
}
}
}
// Mettre en gras les piscines avec + de 3 non conformités
for (let el in defauts) {
if (defauts[el] >= 3){
sheet.getRange((Number(el) + 2), (1)).setFontWeight('bold');
}
}
}