Envoyer des évenement depuis excel vers google Calendar [Résolu]

Signaler
Messages postés
8
Date d'inscription
vendredi 8 juin 2012
Statut
Membre
Dernière intervention
21 juin 2012
-
Messages postés
5
Date d'inscription
samedi 14 avril 2018
Statut
Membre
Dernière intervention
1 mars 2021
-
Bonjour,
Je suis actuellement en stage de fin de première année de BTS et on m'a demander de crée un programme qui pourrait exporter des donnée d'un fichier XLS vers Google Calendar. Voila je voudrais essayer de ne pas envoyer si je recommence en double des évènements. il faudrait pour cela lire ce qu'il y a dans google calendar et les comparer avec ceux de la feuille Excel.

Pouvez vous m'aider a finir mon code ?

voici mon code


//Code de connexion a Google calendar et envoie
            CalendarService service = new CalendarService("");
            service.setUserCredentials(user, password);
            EventEntry entry = new EventEntry();

            // Set the title and content of the entry.
            entry.Title.Text = Even;
            entry.Content.Content = Descrip;
            
            // Set a location for the event.
            Where eventLocation = new Where();
            eventLocation.ValueString = location;
            entry.Locations.Add(eventLocation);
            
            When eventTime = new When();
            DateTime DateD = new DateTime(year, month, day, hourD, minuteD, 0);
            DateTime DateF = new DateTime(year, month, day, hourF, minuteF, 0);
            eventTime.StartTime = DateD;
            eventTime.EndTime = DateF;
            entry.Times.Add(eventTime);
            Uri postUri = new Uri("https://www.google.com/calendar/feeds/" + user + "@gmail.com/private/full");
            
            // Send the request and receive the response
            AtomEntry insertedEntry = service.Insert(postUri, entry);

//code qui recupere les donnees



        private void bt_Valide_Click(object sender, RoutedEventArgs e)
        {

            if ((txt_user.Text "") || (Password.Text ""))
            {
                MessageBox.Show("Veuillez entrez Le nom d'utilisateur et le Mot de passe");
            }
            else
            {
                if (txt_chemin.Text == "")
                {
                    txt_information.Text = "Choisir un fichier";
                }
                else
                {
                    progressBar.Value = 0;
                    List<DataTable> ls = Extract_excel.GetfichierFeuilleFichierExcel(txt_chemin.Text);
                    dt = ls[0];
                    if (dt.Rows.Count > 0)
                    {
                        Thread t = new Thread(new ThreadStart(ThreadFonction));
                        t.Start();
                    }
                     
                    else
                    {
                        MessageBox.Show("Vous n'avez pas de ligne");
                    }
                   
                    
                }
            }
        }

        public void ThreadFonction()
        {
            for (int i = 1; i < dt.Rows.Count; i++)
            {
                DataRow row = dt.Rows[i];
                string Evenement row[0] as string, Lieu row[8] as string, Description = row[9] as string;
                object Year row[1], Month row[2], Day = row[3], HeureD = row[4], MinuteD = row[5], HeureF = row[6], MinuteF = row[7];
                int Year1 Convert.ToInt32(Year), Month1 Convert.ToInt32(Month), Day1 = Convert.ToInt32(Day), HeureD1 = Convert.ToInt32(HeureD), MinuteD1 = Convert.ToInt32(MinuteD), HeureF1 = Convert.ToInt32(HeureF), MinuteF1 = Convert.ToInt32(MinuteF);
                
                 
              
                Dispatcher.BeginInvoke((Action)(() => 
                {
                    Write(txt_user.Text, Password.Text, Evenement, Description, Lieu, Year1, Month1, Day1, HeureD1, MinuteD1, HeureF1, MinuteF1);
                }));
                
                
            }
            
            MessageBox.Show("Evenement(s) Ajouté à votre agenda");


            Dispatcher.BeginInvoke((Action)(() =>
            {
                txt_chemin.Text = " ";
            }));

            
        }

5 réponses

Messages postés
8
Date d'inscription
vendredi 8 juin 2012
Statut
Membre
Dernière intervention
21 juin 2012

oui merci, en effet cela a résolut mon problème merci Whismeril.
Messages postés
3
Date d'inscription
lundi 28 juillet 2003
Statut
Membre
Dernière intervention
1 juillet 2012
2
Salut,
Est-ce que tu pourrais partager ton fichier final ? je pense que ça pourrait intéresser pas mal de monde.
Merci d'avance,
Messages postés
15921
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
6 mai 2021
540
Bonjour,

As tu essayer de mettre une colonne clé primaire dans ton tableau excel?
Il te suffirait quand tu lis un événement de regarder dans google calendar si la clé existe déjà.


Whismeril
Pas tout compris serait-il possible d'avoir un peu plus d'explication?

Merci d'avance
Messages postés
15921
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
6 mai 2021
540
Bonjour

une clé primaire est un champ (string, int, comme tu veux) contenant une valeur unique qui est affectée à un enregistrement.
Si tu supprimes cet enregistrement cette clé ne devra jamais être réutilisée.
Elle doit aussi être indépendante du "device" de saisie et du temps: si un utlisateur crée un rendez vous sur excel, un autre directement sur google calendar, et un troisième sur une appli smartphone, qu'ils valident tous les trois à la même milliseconde (infimement probable, mais bon) les 3 clées générées seront différentes.
Cette clé va maintenant te servir pour les synchronisations.
Si elle n'existe pas, on ajoute.
Si elle existe, que les données sont identiques, rien à faire.
Si elle existe, que les données sont différentes, tu dois choisir la politique que tu appliques:
-remplacement pur et simple (pas forcément le meilleur)
-choisir la mise à jour la plus récente (politique par défaut souvent utilisée)
-alerter l'utilisateur, afficher les deux enregistrements et le laisser choisir

En effet, dommage de ne pas avoir le fichier, car le probleme d import vers google agenda est justement qu il ne fait pas la différence avec les entrées déja existantes et n'ecrase pas les doublons mais les dupliques.

Si quelqu'un à une idée....
a+
Messages postés
7
Date d'inscription
dimanche 4 janvier 2015
Statut
Membre
Dernière intervention
5 janvier 2015

Hello
En effet, le fichier m'interesse bcp J'ai un soucis
ma macro de création de rdv google agenda via excel ne marche plus !!! si qqn à une idée

cette macro me permettait de générer des rdv dans mon GoogleAgenda....

Mais là elle ne veut plus marcher.....

Schéma :
La date est passée au format GoogleAgenda puis création du rdv puis flag.

La modif de la date et le flag marche nikel, mais de création de rdv dans GoogleAgenda


Si qqn à une idée, je suis preneur !!

Bonne soirée
Seb


Dim i, j As Integer

Sub GoogleAgenda()


With Worksheets("RDV")




On Error Resume Next
j = .Range("A2").End(xlDown).Row
For i = 2 To j


'Convertit la DATERELANCE en Format de DATE pour GOOGLEAGENDA
.Cells(i, "D") = "'" & Format(.Cells(i, "C"), "yyyy-mm-dd")



If .Cells(i, 5) <> "ok" And .Cells(i, 4) <> "" Then

'================================== PARAMETRES GOOGLE AGENDA ==================================
Email = "XXXXXXXXXXXXXXXXXXXXXXX"
Passwd = "XXXXXXXXXXXXXXXXXXXX"
authUrl = "https://www.google.com/accounts/ClientLogin"
CALENDARURL = "http://www.google.com/calendar/feeds/default/private/full"
MAILINVITE = "XXXXXXXXXXXXXXXXXXXXX"
LIEU = "XXXXXXXXXXXXXXXXXXXXX"


sujet = Range("C" & i).Value & " - " & Range("AF" & i).Value
DESCRIPTIONRDV = Range("AF" & i).Value
NOMINVITE = "Agenda Emploi"
DATEDEBUT = Range("AP" & i).Value & "T14:00:00.000Z"
DATEFIN = Range("AP" & i).Value & "T15:15:00.000Z"



'================================== CREATION D'UN EVENEMENT ==================================
calendarEntry = "<?xml version='1.0' ?><entry xmlns='http://www.w3.org/2005/Atom' " _
& "xmlns:gd='http://schemas.google.com/g/2005'>" _
& "<category scheme='http://schemas.google.com/g/2005#kind' " _
& "term='http://schemas.google.com/g/2005#event'></category>" _
& "<title type='text'>" & sujet & "</title>" _
& "<content type='text'>" & DESCRIPTIONRDV & "</content>" _
& "<author>" _
& "<name>" & NOMINVITE & "</name>" _
& "<email>" & MAILINVITE & "</email>" _
& "</author>" _
& "<gd:transparency " _
& "value='http://schemas.google.com/g/2005#event.opaque'>" _
& "</gd:transparency>" _
& "<gd:eventStatus " _
& "value='http://schemas.google.com/g/2005#event.confirmed'>" _
& "</gd:eventStatus>" _
& "<gd:where valueString='" & LIEU & "'></gd:where>" _
& "<gd:when startTime='" & DATEDEBUT & "' " _
& "endTime='" & DATEFIN & "'></gd:when>" _
& "</entry>"

'================================== AUTHENTIFICATION ==================================
Set objHTTP = CreateObject("Microsoft.XMLHTTP")
objHTTP.Open "POST", authUrl, False
objHTTP.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
objHTTP.send "Email=" + Email + "&Passwd=" + Passwd + "&service=cl&source=Gulp-CalGulp-1.05"
strAuthTokens = objHTTP.responseText
strAuthTokens = Replace(strAuthTokens, vbCr, "")
strAuthTokens = Replace(strAuthTokens, vbLf, "")
strAuthTokens = Replace(strAuthTokens, vbCrLf, "")
strAuthTokens = Replace(strAuthTokens, "SID", "&SID", 1, 1)
strAuthTokens = Replace(strAuthTokens, "LSID", "&LSID")
strAuthTokens = Replace(strAuthTokens, "Auth", "&Auth")
strAuthTokens = Right(strAuthTokens, Len(strAuthTokens) - Len("Auth=") - InStr(strAuthTokens, "Auth=") + 1)
Set objHTTP = Nothing

'================================== REDIRECT ==================================
Set objHTTP = CreateObject("Microsoft.XMLHTTP")
objHTTP.Open "POST", CALENDARURL, False
objHTTP.setRequestHeader "Content-Type", "application/atom+xml"
objHTTP.setRequestHeader "X-If-No-Redirect", "True"
objHTTP.setRequestHeader "Authorization", "GoogleLogin auth=" & strAuthTokens
objHTTP.send calendarEntry
'objHTTP.status should be 412

'================================== POST TO THE NEW URL ==================================
headers = objHTTP.getAllResponseHeaders()
strResponse = objHTTP.responseText
redirectStringPos = InStr(headers, "X-Redirect-Location:")
redirectStringLength = InStr(InStr(headers, "X-Redirect-Location:"), headers, vbCrLf) - InStr(headers, "X-Redirect-Location:")
redirectUrl = Replace(Mid(headers, redirectStringPos, redirectStringLength), "X-Redirect-Location: ", "")

Set objHTTP = CreateObject("Microsoft.XMLHTTP")
objHTTP.Open "POST", redirectUrl, False
objHTTP.setRequestHeader "Authorization", "GoogleLogin auth=" & strAuthTokens
objHTTP.setRequestHeader "Content-Type", "application/atom+xml"
objHTTP.send calendarEntry
'objHTTP.status should be 201


If objHTTP.Status = 201 Then
MsgBox "Event saved"
Else
MsgBox objHTTP.Status



End If
.Cells(i, 5) = "OK"
Next

End With

End Sub
Messages postés
15921
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
6 mai 2021
540
Bonjour ton message n'a rien a faire ici.
Ce fil traite de C#, pas de VB.

Néanmoins comme tu parles de macro, on va supposer que tu travailles en VBA, et donc je te conseille la lecture de ce topic, en entier..
Messages postés
5
Date d'inscription
samedi 14 avril 2018
Statut
Membre
Dernière intervention
1 mars 2021

bonjour

désolé de relancer ce sujet, votre fichier pourrai m’intéresser, est il possible que vous le partagiez?
merci