Bienvenue sur le blog de BI4ol

Retrouvez ici des articles d'actualité traitant de l'informatique, d'internet mais également des billets d'humeurs au gré des envies !

Importer Google Agenda dans Google Sheets

Importer Google Agenda dans Google Sheets

« 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.

Importer Google Agenda dans Google Sheets : ouvrir l'éditeur de scripts
Ouvrir l’Editeur de scripts

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).

Lancer la macro depuis Google Sheets
Lancer la macro

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.

Importer un google Agenda dans Google Sheets : affecter la macro à une forme
Créer une forme pour y affecter la macro

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.

Assigner un script à la forme créée
Assigner le script à la forme créée

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.

Jonathan

Je suis passionné d'informatique et un peu touche à tout dans le domaine ! Autant de la programmation, du web que de la maintenance ou encore de la sécurité. C'est bien trop passionnant pour ne s'arrêter qu'à une facette de l'informatique... Je suis également formateur en informatique pour une association.

Laisser un commentaire