IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

APIs Google Discussion :

Créer un évènement automatique dans Calendar depuis Sheet


Sujet :

APIs Google

  1. #1
    Membre régulier
    Inscrit en
    Février 2011
    Messages
    263
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 263
    Points : 100
    Points
    100
    Par défaut Créer un évènement automatique dans Calendar depuis Sheet
    Bonjour à tous !

    Je débute sur google script et je rentre une difficulté avec un code trouvé sur le net.

    L'objectif est le suivant :
    - mes utilisateurs remplissent un formulaire de réservation sur un formulaire Google.
    - les infos servent à réserver un créneau dans un agenda google.

    Problème rencontré : sans que je trouve l'origine, le script me crée parfois une double ou triple réservations pour une seule et même réponse au formulaire.

    Voyez-vous d'où cela peut venir ?

    Voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    var EVENT_IMPORTED = "AJOUTE"; // Ajoutera le texte "AJOUTE" dans la colonne J
    var ss = SpreadsheetApp.getActiveSpreadsheet();
     
    function onOpen() {
       var menuEntries = [{name: "Ajouter les événements à l'agenda", functionName: "importCalendar"}];
       ss.addMenu("Agenda", menuEntries); // Pour ajouter une menu Agenda et un sous-menu "ajouter les événements" dans la feuille de calcul. Cela permettra de tester manuellement la liaison entre la feuille de calcul et l'agenda
    }
     
    function importCalendar() { 
      // empêche le code de s'exécuter pour laisser le temps au code présent dans le formulaire d'enregistrer l'ID de la réponse
      Utilities.sleep(3000);
     
      var sheet = SpreadsheetApp.getActiveSheet();
      var startcolumn = 2;  // Première colonne de prise en compte des données, soit la colonne B (Nom - Prénom)
      var numcolumns = 30;  // Nombre de colonne
      var dataRange = sheet.getRange(startcolumn, 1, numcolumns, 11)   // Nombre de colonne contenant des données
      var data = dataRange.getValues();
      for (var i = 0; i < data.length; ++i) { 
        var column = data[i];
        var titre = column[5];        // Colonne B - Titre de l'événement dans l'agenda - Titre du rendez-vous
        var DateDebut = column[3];    // Colonne C - date et heure de début de l'événement
        var DateFin = column[4];      // Colonne D - date et heure de fin de l'événement
        var NomPrenom = column[1];
        var Service = column[2];
        var Lieu = column[6];
        var Vehicule = column[7];
        var IdReservation = column[9];
        var Email = column[8]
     
        var description = "Réservation par : "+ NomPrenom +" // Service : "+ Service +" // Lieu : "+ Lieu +" // Id. réservation : " + IdReservation;
     
     
        var eventImported = column[10]; // Colonne J - Statut de l'importation - colonne AJOUTE A L'AGENDA
     
        var setupInfo = ss.getSheetByName("agenda"); // Nom de la feuille de calcul contenant la nom de l'agenda
        var calendarName = setupInfo.getRange("A1").getValue(); // Référence de la cellule contenant le nom de l'agenda
        var cal = CalendarApp.openByName(calendarName);
     
        if (eventImported  != EVENT_IMPORTED && titre != "") {  // Evite les doublons dans l'agenda, si le texte AJOUTE est présent en J, l'événement n'est pas ajouté
     
            //create event https://developers.google.com/apps-script/class_calendarapp#createEvent
            var newEvent = cal.createEvent(Vehicule + " - " + titre, new Date(DateDebut), new Date(DateFin),{description : description});
            //get ID
            var newEventId = newEvent.getId();
            //mark as entered, enter ID
            sheet.getRange(sheet.getLastRow(),12).setValue(newEventId); 
     
     
          sheet.getRange(startcolumn + i, 11).setValue(EVENT_IMPORTED); // Nombre de colonne contenant des données
     
     
          var message = 'La réservation suivante : ' + Vehicule + ' - ' + titre + ' du ' + Utilities.formatDate(DateDebut,SpreadsheetApp.getActive().getSpreadsheetTimeZone(), "dd-MM-yyyy HH:mm:ss") + ' au ' + Utilities.formatDate(DateFin,SpreadsheetApp.getActive().getSpreadsheetTimeZone(), "dd-MM-yyyy HH:mm:ss") + ' a été enregistrée. \nVotre code de réservation est le ' + newEventId + ' Ce code devra être renseigné pour annuler votre réservation.';
          var subject = 'Votre réservation de véhicule';
          //MailApp.sendEmail(emailAddress, subject, message);
          MailApp.sendEmail(Email,subject,message);
     
          SpreadsheetApp.flush();  
        }
      }
    }

    Je ne comprends pas tout mon code. Donc pour ma culture perso, si vous avez le temps de m'expliquer les lignes suivantes :
    - 18 : je ne comprends pas pourquoi on boucle sur des colonnes avec une valeur variable "i" alors qu'on indique après en dur le numéro de colonnes
    - 39 : je comprends qu'on compare la valeur de la variable "eventimported" avec la valeur de la variable "event_imported" et le titre de la réservation. Mais je ne comprends pas le '= ""'. De plus, que vient faire la variable titre dans la condition ?


    Merci beaucoup pour votre aide !

  2. #2
    Modérateur
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 077
    Points : 17 201
    Points
    17 201
    Par défaut
    Salut
    Ligne 18: var column = data[i]; qui est un tableau, ce tableau comprend x nombre d'indice (data.length) , chacune représentant, titre pour l'indice 5, DateDebut pour l'indice 3, .... etc.

    Ligne 39
    je ne comprends pas le = "".
    != "" est inégal a non renseigné, le titre ne doit pas être vide.
    Soyez sympa, pensez -y
    Balises[CODE]...[/CODE]
    Balises[CODE=NomDuLangage]...[/CODE] quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Balises[C]...[/C] code intégré dans une phrase.
    Balises[C=NomDuLangage]...[/C] code intégré dans une phrase quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Le bouton en fin de discussion, quand vous avez obtenu l'aide attendue.
    ......... et pourquoi pas, pour remercier, un pour celui/ceux qui vous ont dépannés.
    👉 → → Ma page perso sur DVP ← ← 👈

  3. #3
    Membre régulier
    Inscrit en
    Février 2011
    Messages
    263
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 263
    Points : 100
    Points
    100
    Par défaut
    Merci pour ta réponse.
    J'y vois un peu plus clair sur cette ligne même si je ne comprends pas pourquoi créer un tableau alors que mes données sont déjà dans un tableau dans la feuille de calcul.
    Il crée un tableau d'une seule ligne avec les données à traiter c'est ça ?

Discussions similaires

  1. [AC-2002] Créer un tableau croisé dynamique dans Excel depuis Access
    Par dut-dut dans le forum VBA Access
    Réponses: 3
    Dernier message: 29/11/2010, 13h42
  2. Réponses: 13
    Dernier message: 03/09/2010, 10h27
  3. créer un événement dans ThisWorkbook avec VBA
    Par jmcrib dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 18/09/2007, 12h18
  4. Créer des champs en automatique dans formulaire
    Par Daniel MOREAU dans le forum VBA Access
    Réponses: 5
    Dernier message: 28/06/2007, 18h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo