« Comment importer les données de mon agenda Google dans une feuille de calcul ? ». C’est la demande que j’ai eu d’une cliente qui gère beaucoup d’information sur son Agenda Google et qui aimerait ensuite pouvoir les étudier avec un tableur. Je dois avouer que je n’avais jamais mis le nez dans les scripts Google. Il semblait que l’heure était venue ! Voici une introduction à cette technologie.
Créer le script
On commence par créer un classeur avec Google Sheets dans Google Drive. Dans Google Sheets, cliquez sur Outils puis Editeur de scripts. On arrive ainsi dans Google Scripts, outil de Google pour créer des scripts sur ses outils.
Pour ma part, je connais relativement bien le VBA utilisé par Microsoft dans sa suite Office et il faut dire que la philosophie du langage Google Apps Script n’est pas déroutant au début. C’est d’ailleurs un langage très proche de Javascript. Comme souvent pour aborder un nouveau langage, je pars d’un code proche trouvé sur internet, puis je le modifie pour lui faire faire exactement ce que je veux. Ici, je rends hommage au travail de Fabrice Faucheux avec cet article qui a été mon point de départ dans ce projet. Ensuite, la documentation de Google pour son langage de Scripts est très fournie et permet de trouver rapidement les bonnes propriétés et méthodes.
Importer les données de Google Agenda vers Google Sheets : le code
Dans mon cas, je suis donc parti du script de Fabrice Faucheux dont voici le code :
function maFonction() {
var classeur = SpreadsheetApp.getActiveSpreadsheet();
var calendrier = CalendarApp.getDefaultCalendar();
var debut = new Date('01/01/2018');
var fin = new Date('12/31/2018');
var evenements = calendrier.getEvents(debut, fin);
Logger.log(evenements.length);
var nombre = evenements.length;
classeur.insertSheet(0);
var feuille = classeur.getSheets()[0];
for(var i=0; i<nombre; i++){
feuille.getRange(i+1, 4).setValue(evenements[i].getStartTime());
feuille.getRange(i+1, 1).setValue(evenements[i].getTitle());
feuille.getRange(i+1, 3).setValue(evenements[i].getLocation());
feuille.getRange(i+1, 2).setValue(evenements[i].getDescription());
feuille.getRange(i+1, 5).setValue(evenements[i].getEndTime());
feuille.getRange(i+1, 6).setValue(evenements[i].getColor());
}
}
J’ai donc modifié celui-ci pour répondre précisément aux besoins de ma cliente (je l’ai coloré pour une lecture plus simple) :
function myFunction() {
var classeur = SpreadsheetApp.getActiveSpreadsheet();
var calendrier = CalendarApp.getCalendarById('ID de l agenda de ma cliente');
var feuille = classeur.getActiveSheet();
var debut = feuille.getRange(2,7).getValue();
//La date de début est indiqué dans la cellule G2
var fin = feuille.getRange(2,8).getValue();
//La date de fin est indiqué dans la cellule H2
var evenements = calendrier.getEvents(debut, fin);
//Récupère des événements entre la date de début et la date de fin.
Logger.log(evenements.length);
//on affiche dans le journal d'exécution le nombre d'événements renvoyés
var nombre = evenements.length;
feuille.getRange("A2:D100").clearContent();
//J'efface le contenu de l'ancienne exécution (je sais qu'il ne peut y avoir plus de 100 résultats, j'efface donc les lignes 2 à 100, plus rapide que de récupérer la ligne maximale...)
//je fais une boucle pour écrire les données de l'agenda sur la feuille
for(var i=0; i<nombre; i++){
feuille.getRange(i+2, 1).setValue(evenements[i].getTitle());
feuille.getRange(i+2, 2).setValue(evenements[i].getDescription());
feuille.getRange(i+2, 3).setValue(evenements[i].getStartTime());
feuille.getRange(i+2, 4).setValue(evenements[i].getEndTime());
}
}
Lancer le script depuis Google Sheets
Reste donc plus qu’à lancer le script depuis un classeur Google Sheets. Pour cela, il suffit de cliquer sur Outils > Macros > puis choisir le nom de la macro (nom de la fonction dans le script).
Toutefois, cette méthode demande de nombreux clics, il y a certainement moyen de faire plus court. En effet, il est possible de créer un dessin (une forme) et affecter le script à ce dessin. Ainsi, un clic sur le dessin lancera la macro. Pour cela, cliquez sur Insertion > Dessin puis créez la forme souhaitée.
Ensuite, en cliquant droit sur le dessin, cliquez sur les trois points, puis sur Assigner le script. Il suffit alors d’indiquer le nom de la macro, myFunction pour moi.
Et voilà, il ne reste plus qu’à modifier les dates puis cliquer sur le bouton pour importer les données Google Agenda dans Google Sheets !
Besoin d’aide pour créer vos fichiers bureautiques ? Faites appel à nos services.
BI4ol améliore vos fichiers.
Laisser un commentaire