Alimentation auto de google agenda

Bonjour,

Je rencontre quelques soucis dans l'execution de mon script. En effet, je souhaite récupérer les adresses email renseignées dans un fichier sheet pour alimenter automatiquement des invitations google agenda déjà créées.

mon tableau est le suivant:

image

je me base sur les ID de chaque evénements google déjà créés

et voici mon script :

function ajouterInvitesDynamiques() {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Invitations");
  const lastRow = sheet.getLastRow();
  const data = sheet.getRange(2, 1, lastRow - 1, 4).getValues(); // A:D

  for (let i = 0; i < data.length; i++) {
    const nom = data[i][0];
    const email = data[i][1];
    const eventId = data[i][2];
    const statut = data[i][3];

    // On saute si l’email ou l’événement est manquant, ou si déjà traité
    if (!email || !eventId || statut) continue;

    try {
      // Récupération de l’événement via CalendarApp
            const event = CalendarApp.getEventById(eventId);
      if (event) {
        event.addGuest(email);
        sheet.getRange(i + 2, 4).setValue("Invité le " + new Date().toLocaleDateString());
      } else {
        sheet.getRange(i + 2, 4).setValue("⚠️ Événement introuvable");
      }
    } catch (e) {
      sheet.getRange(i + 2, 4).setValue("Erreur : " + e.message);
    }
  }
}

l'ID événement n'est jamais trouvé alors que bien renseigné dans mon tableau

Merci de votre aide

Salut,

Le script me semble correct, peux tu ajouter les logs suivants ? après cette ligne :

const event = CalendarApp.getEventById(eventId);
console.log('Event testé ID: '+event.getId()+' - Titre: '+event.getTitle())

merci de votre retour.

j'ai ce retour

image

Ok, le message d'erreur dit qu'il ne peut la lire l'id de l'event, car il est null, cela signifie donc que GAS n'arrive pas à créer l'évent ici :

            const event = CalendarApp.getEventById(eventId);

Premier point, l'event est il bien sur votre calendrier, rattaché au compte google qui exécute ce script ?

Si c'est bien le cas, alors il serai intéressant de tester manuellement un Id voir ce que ça donne, comme ceci :

function test(){
  const event = CalendarApp.getEventById('METTRE ID ICI');
  console.log('Event testé ID: '+event.getId()+' - Titre: '+event.getTitle())
}

Si ce test fonctionne, alors il faut voir ce qui est renvoyé en id pour créer la constante event : const eventId = data[i][2];

Par exemple en ajoutant un log ici :

console.log('eventId : '+eventId)
const event = CalendarApp.getEventById(eventId);
console.log('Event testé ID: '+event.getId()+' - Titre: '+event.getTitle())

En récapitulatif :

  1. est ce que le calendrier sur lequel est l'event est bien celui du compte google qui exe le script ?
  2. il faut effectuer la fonction test en mettant un des ID testé, voir si GAS arrive bien à atteindre l'event.
  3. Si oui ajouter un log pour voir pourquoi l'id mis manuellement fonctionne mais pas celles de la sheet.

en testant le test avec mon ID

function test(){
  const event = CalendarApp.getEventById('NDk3NWxkanR2MzBkbjFzcmxvMWtyZzlxcTkgZ2h5c2xhaW4ucGV0aXRnZW5ldEByYW5kc3RhZC5mcg');
  console.log('Event testé ID: '+event.getId()+' - Titre: '+event.getTitle())
}

j'ai toujours le même message

Du coup je me pose la question si je prends la bonne information concernant l'ID de l'événement google !!! C'est bien la référence après /eventedit/ dans l'adresse de l'invit google ?

Ce n'est en effet pas une Id valide

Voici une petite fonction qui liste les Id des events sur un calendrier donné (m-1 jusqu'à m+1 pour l'exemple):

function showEventsId() {
const cal = CalendarApp.getCalendarById('METTRE EMAIL DE L'AGENDA ICI');
const today = new Date();
const start = new Date(today.getFullYear(), today.getMonth() - 1, today.getDate());
const end = new Date(today.getFullYear(), today.getMonth() + 1, today.getDate());
cal.getEvents(start, end).forEach(e => {console.log(`Event ID: ${e.getId()} - Titre: ${e.getTitle()} - Début: ${e.getStartTime()} - Fin: ${e.getEndTime()}`);});
}

merci beaucoup pour votre retour.

effectivement avec les bons éléments c'est mieux et ca marche parfaitement.

cependant, j'ai essayé d'écrire un script pour automatiser l'envoi de l'adresse email sur l'invitation quand une nouvelle adresse est renseignée mais je n'y arrive pas.

C'est à dire ?

Pouvez-vous détailler le process attendu ? Car je ne comprends pas ceci : " j'ai essayé d'écrire un script pour automatiser l'envoi de l'adresse email sur l'invitation quand une nouvelle adresse est renseignée"

dès qu'un nouveau participant est inscrit et renseigne son email, il soit automatiquement ajouté à l'invit sans devoir lancer manuellement le script pour l'ajouter

Il y a plusieurs possibilités :

> un script onEdit qui s'active à chaque modification du fichier. (avantage = rapidité d'envoi du mail / inconvénient = ralenti le fichier car se lance à chaque édition)

> un script basé sur un déclencheur temporel . (avantage = fonctionne en arrière plan donc pas d'impact sur le fichier / inconvénient = moins réactif, suivant la fréquence choisie)

La solution 1 est préférable si le fichier est simple, qu'il y a peu de modification, que l'usage du fichier soit principalement votre script d'agenda.

La solution 2 est préférable si le fichier est utilisé pour d'autres actions, qu'il y a plusieurs éditions qui n'ont rien à voir.

Désolé je pensé avoir répondu.

Merci pour votre cela fonctionne parfaitement

Rechercher des sujets similaires à "alimentation auto google agenda"