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.