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

Messages postés
8
Date d'inscription
vendredi 8 juin 2012
Dernière intervention
21 juin 2012
- - Dernière réponse : Whismeril
Messages postés
12368
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
11 décembre 2018
- 4 janv. 2015 à 19:53
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 = " ";
            }));

            
        }
Afficher la suite 

Votre réponse

5 réponses

Meilleure réponse
Messages postés
8
Date d'inscription
vendredi 8 juin 2012
Dernière intervention
21 juin 2012
3
Merci
oui merci, en effet cela a résolut mon problème merci Whismeril.

Merci bylkus 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 97 internautes ce mois-ci

Commenter la réponse de bylkus
Messages postés
12368
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
11 décembre 2018
1
Merci
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
Whismeril
Messages postés
12368
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
11 décembre 2018
-
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
Commenter la réponse de Whismeril
Messages postés
3
Date d'inscription
lundi 28 juillet 2003
Dernière intervention
1 juillet 2012
1
Merci
Salut,
Est-ce que tu pourrais partager ton fichier final ? je pense que ça pourrait intéresser pas mal de monde.
Merci d'avance,
Commenter la réponse de akene
0
Merci
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+
Commenter la réponse de stephstrass
Messages postés
7
Date d'inscription
dimanche 4 janvier 2015
Dernière intervention
5 janvier 2015
0
Merci
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
Whismeril
Messages postés
12368
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
11 décembre 2018
-
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..
Commenter la réponse de GADENSEB

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.