Créer des événements avec des heures de début et de fin

Connaissez Google Apps Script ? C'est un langage de programmation propre à Google. Il permet de réaliser des scripts à l'intérieur de certains services de Google, dont Google Workspace.

Dans l'exemple que je vous présente aujourd'hui, je vous propose de créer en automatique depuis Google Sheets des événements dans Google Agenda.

Voici un exemple de différents événements placés dans une feuille de calcul.



Et pour la première ligne, voici l'événement créé dans Google Agenda


Voici le code permettant d'avoir 
  • un menu,
  • une fonction pour créer les événements,
  • une fonction pour calculer la date et heure de fin.

/**
* Fonction pour ajouter un menu personnalisé
*/
function onOpen() {
SpreadsheetApp.getUi()
.createMenu('Sheets vers Agenda')
.addItem('Créer les événements', 'creerEvenementDepuisLignes')
.addToUi();
}

/**
* Ajouter plusieurs éléments au calendrier avec des options
*/
function creerEvenementDepuisLignes() {
// Obtenir les données à partir du tableur
const classeur = SpreadsheetApp.getActiveSpreadsheet();
const feuille = classeur.getSheetByName('Feuille 1');
const donnees = feuille.getDataRange().getValues();
// Supprimer la ligne d'en-tête
donnees.shift();
// Récupérer le calendrier
const utilisateur = Session.getActiveUser().getEmail();
const calendrier = CalendarApp.getCalendarById(utilisateur);
// Boucle sur les lignes de données et à chaque fois créer un événement
donnees.forEach( ligne => {
// Récupérer les données
const dateEvenement = ligne[0];
const titreEvenement = ligne[1];
const descriptionEvenement = ligne[2];
const dureeEvenement = ligne[3];
const invitesEvenement = ligne[4];
const lieuEvenement = ligne[5];
const options = {
description: descriptionEvenement,
location: lieuEvenement,
guests: invitesEvenement,
sendInvites: true
};
// Ajout des événements au calendrier
// Déterminer si un événement est pour toute la journée ou un événement avec heure de début/fin
if (dureeEvenement === 'Toute la journée') {
// Toute la journée
calendrier.createAllDayEvent(titreEvenement, dateEvenement, options);
}
else {
console.log(dateEvenement);
// Ecrire une fonction pour créer une nouvelle date de fin
const dateFinEvenement = creerDateFin(dateEvenement, dureeEvenement);
console.log(dateFinEvenement);
calendrier.createEvent(titreEvenement, dateEvenement, dateFinEvenement, options)
}
});
}

/**
* Fonction pour créer une nouvelle date de fin basée sur l'heure de début et la durée
*/
function creerDateFin(horaireDebut, duree) {
// Créer le nouvel objet date-heure
const horaireFin = new Date(horaireDebut);
// Calculer la durée en tant que composantes distinctes des heures et des minutes
const heures = Math.floor(duree);
const minutes = (duree - heures) * 60;
// Créer de nouvelles heures et de nouvelles minutes pour l'heure de fin
const nouvelleHeure = horaireFin.getHours() + heures;
const nouvelleMinutes = horaireFin.getMinutes() + minutes;
// Fixer les nouvelles heures et minutes
horaireFin.setHours(nouvelleHeure, nouvelleMinutes);
// Retourner l'heure de fin
return horaireFin;
}