Reserver Timing dans Google Calendar via Google Sheets

Bonjour,

Je suis entrain de buguer sur le script qui permettrait à mes collaborateurs de réserver des meetings dans mon agenda via Google sheets.

Mon soucis, est que j'aimerais que les meetings soient de 30 minutes.

Voici mon script :

function myFunction() {
  var spreadsheet = SpreadsheetApp.getActiveSheet();
  var calendarID = spreadsheet.getRange('E2').getValue();
  var eventCal = CalendarApp.getCalendarById(calendarID);
  var lr = spreadsheet.getLastRow();
  var count = spreadsheet.getRange("A6:F"+lr+"").getValues();

  for (x=0; x<count.length; x++) {
          var shift = count[x];

      var summary = shift[0];
      var startTime = shift[1];
      var endTime = shift[2];
      var guests = shift[3];
      var description = shift[4];
      var location = shift[5]; 

      var event = {
          'location': location,
          'description': description,
          'guests':guests +',',
          'sendInvites': 'True',
}

   }   

 eventCal.createEvent(summary, startTime, endTime, event);
}

Comment faire pour que endTime soient automatiquement de 30 minutes svp ?

Merci.

Yo Wds

Dans gSheets, si les heures sont au bon format, on peut faire +/- entre elles.

Par ex : 23:50:00 + 0:30:00 = 0:20:00

Ca ferait donc :

var endTime = shift[1] + 00:30:00 ;

Ca devrait le faire... si Calendar n'a pas une gestion des heures à sa façon.

Bon test

EMX

Yo Exacel,

Merci pour ta réponse, mais ça ne fonctionne pas.

Par contre, j'ai tester ceci ... et ça a fonctionné une fois, puis plus du tout.

Quelqu'un pour m'aider à trouver la solution svp ?

function myFunction() {
  var spreadsheet = SpreadsheetApp.getActiveSheet();
  var calendarID = spreadsheet.getRange('E2').getValue();
  var eventCal = CalendarApp.getCalendarById(calendarID);
  var lr = spreadsheet.getLastRow();
  var count = spreadsheet.getRange("A6:F"+lr+"").getValues(); 

  for (x=0; x<count.length; x++) {
          var shift = count[x];

      var summary = shift[0];
      var startTime = shift[1];
      var endTime = shift[2];
      var guests = shift[3];
      var description = shift[4];
      var location = shift[5]; 

      var event = {
          'location': location,
          'description': description,
          'guests':guests +',',
          'sendInvites': 'True',      
      }
     }   

  var intLastRow = findLastRow();
  spreadsheet.getRange('C'+intLastRow).setValue(startTime);
  eventCal.createEvent(summary, startTime, endTime, event);
}

function findLastRow(){
  var sheet = SpreadsheetApp.getActiveSheet();
  var data = sheet.getDataRange().getValues();
  for(var i = data.length-1 ; i >=0 ; i--){
    if (data[i][0] != null && data[i][0] != ''){
      return i+1 ;
    }
  }
}

Il me fait d'abord une erreur, puis la deuxième fois il l'applique :

Il affiche startTime et en plus il pousse dans mon Google Calendar.

Le deuxième soucis sera d'ajouter 30 minutes à la formule

Bjr,

Je crois que nous n'avons pas bien cerné le problème.

Est-il sur la récupération des données du classeur ou sur l'injection dans Calendar ?

Comment sont codées les données des colonnes A à F de la feuille de départ ?

La durée forcée de 30 min se fera forcément en calculant endTime à partir de startTime. Ce n'est pas une difficulté en soi.

La difficulté réside plus dans la création de l'event dans Calendar, qui existe peut-être déjà.

Ce qui expliquerai que ça n'a fonctionné qu'une fois.

Il faudra éviter de re-balayer toute la feuille, mais de ne traiter que les demandes nouvelles.

Peut-être rajouter un flag ou un stamp sur les lignes déjà traitées pour ne plus les considérer lors de la prochaine exécution.

Si j'avais accès à un fichier partagé, ce serait beaucoup plus simple.

Au prochain épisode...

EMX

Bonjour,

J'ai mis un peu de temps à répondre parce que j'ai passé tout ce temps à trouver une solution mais en vain.

Alors, pour clarifier le système que j'essaie de mettre en place :

Mon but est de pouvoir via une entrée Gsheet (donc insérer les infos dans les différentes colonnes), et qu'automatiquement les infos se place dans mon agenda.

Ex.

Col A 10/10/2020 10:00:00

Col B 10/10/2020 10:30:00 (automatiquement bloqué à 30 minutes)

Col C www.google.com

Col D Calendar

Et donc, les infos s'insère dans mon agenda.

J'espère avoir été clair.

Rechercher des sujets similaires à "reserver timing google calendar via sheets"