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

SharePoint .NET Discussion :

Extraire des fichiers Excel ou Csv contenu dans une liste sharepoint [SP-2007]


Sujet :

SharePoint .NET

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Février 2005
    Messages
    172
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 172
    Points : 73
    Points
    73
    Par défaut Extraire des fichiers Excel ou Csv contenu dans une liste sharepoint
    Bonjour

    Je souhaite extraire des fichiers Excel ou Csv dans une liste SharePoint.
    Mon objectif est de pouvoir récupérer ces fichiers et de les déposer dans un autre emplacement du serveur de la machine.

    Actuellement je ne vois pas de méthode dans la classe SPList qui me permet de récupérer des fichiers.
    Je pensais voir des méthodes du genre Getfiles etc.

    Sinon Savez vous comment y procéder ?

    merci d'avance.

    stardeus

  2. #2
    Expert confirmé Avatar de Lapinpanda
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2009
    Messages
    3 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Juin 2009
    Messages : 3 230
    Points : 4 913
    Points
    4 913
    Par défaut
    c'est pas une doc lib ta liste?

    Si c'est le cas normalement avec l'Explorateur de documents tu peux faire un copier coller massif
    Merci d'utiliser en cas de résolution de votre problème

    N'oubliez pas non plus le petit pouce vert pour récompenser celui que vous a aidé

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Février 2005
    Messages
    172
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 172
    Points : 73
    Points
    73
    Par défaut
    Effectivement je suis d'accord avec vous qu'on peut le faire avec un copier coller massif . J'ai omis de vous préciser que la contrainte était de le faire en automatique.
    En l'occurrence un job s'éxécute à la demande . celui ci permet de récupérer les fichiers existant dans la liste et de le déposer dans un autre emplacement.

  4. #4
    Expert confirmé Avatar de Lapinpanda
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2009
    Messages
    3 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Juin 2009
    Messages : 3 230
    Points : 4 913
    Points
    4 913
    Par défaut
    Pour copier des fichiers il y a plusieurs façons. Soit tu reste dans les SPListItem & SPFile & SPFolder; soit tu fais un mix SPListItem et les flux Stream pour travailler avec du binaire, ce qui rajoute de la performance mais c'est moins intuitif que l'API que propose sharepoint.


    Pour travailler avec des fichiers sharepoint cela donne qq chose de ce genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    SPWeb web = SPSite.OpenWeb()
    SPList list = web.list[nom de la liste]
    SPListItemCollection listItems = list.Items
    for each (SPListItem item in listItems)
    {
    if(web.getFileOrFolder(item) != null)
    {
    //do work
    }
     
    }
    c'est loin d'etre propre, c'est juste une idée de ce que tu sera amener à faire.

    Note : N'oublie pas les Update() et/ou SystemUpdate()[aucune notification systeme], les méthodes pour travailler avec les fichiers sont dans l'objet SPWeb
    Merci d'utiliser en cas de résolution de votre problème

    N'oubliez pas non plus le petit pouce vert pour récompenser celui que vous a aidé

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Février 2005
    Messages
    172
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 172
    Points : 73
    Points
    73
    Par défaut
    Bonjour

    Merci pour ton aide. Je rencontre quelque difficulté à pouvoir lire la liste sharepoint.
    Voici ce que je fais :

    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
     
     
     NetworkCredential credential = new System.Net.NetworkCredential("user", "password");
     
                    using (SPSite site = new SPSite("http://@IP/sites/appliweb"))
     
                    {
                        using (SPWeb web = site.OpenWeb())
                        {
     
     
                            SPList list = web.GetList("/ListReception/");      
                            SPListItemCollection listItems = list.Items;
                            foreach (SPListItem item in listItems)
                            {
                                foreach (string name in item.Attachments)
                                {
     
                                    string fullname = item.Attachments.UrlPrefix + name;
     
                                    SPFile files = item.Web.GetFile(fullname);
     
                                    Console.WriteLine("File Name {0}, fileSize {1} kb",
     
                                    fullname, files.Length);
     
                                }     
     
                            }
    Je ne parviens pas à obtenir le fichier .
    Je constate que l'objet SPSITE ne semble pas atteindre le site de collection
    Avez vous une idée ?

    merci

  6. #6
    Expert confirmé Avatar de Lapinpanda
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2009
    Messages
    3 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Juin 2009
    Messages : 3 230
    Points : 4 913
    Points
    4 913
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SPList list = web.GetList("/ListReception/");
    Ta liste s'appelle ListReception ou /ListReception/ ?
    Il faut utiliser ListReception si c'est ListReception.

    Aussi, tu dois utiliser l'internal name, et non le display name, tu peux vérifier que tu utilise le bon en faisant la manip dans sharepoint :

    Lists / settings -> regarder l'URL le param fieldName


    EDIT :
    NetworkCredential credential = new System.Net.NetworkCredential("user", "password");
    A quoi te sert cette objet? tu veux atteindre sharepoint par des WebServices? si c'est le cas, le model objet ne marche pas
    Merci d'utiliser en cas de résolution de votre problème

    N'oubliez pas non plus le petit pouce vert pour récompenser celui que vous a aidé

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Février 2005
    Messages
    172
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 172
    Points : 73
    Points
    73
    Par défaut
    using (SPSite site = new SPSite("http://@IP/sites/appliweb"))

    {
    using (SPWeb web = site.OpenWeb())
    {
    Je souhaite me connecter à l'appli mais lorsque je passe en mode débug , l'objet SPsite me retourne une valeur null.

    J'ai supposé qu'il était nécessaire de s'authentifier pour accéder à la webapplication.
    c'est pour cette raison que j'ai mis :

    NetworkCredential credential = new System.Net.NetworkCredential("user", "password");
    Pourtant c'est bien avec cette adresse" http://@IP/sites/appliweb" que j'atteins le site web

  8. #8
    Expert confirmé Avatar de Lapinpanda
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2009
    Messages
    3 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Juin 2009
    Messages : 3 230
    Points : 4 913
    Points
    4 913
    Par défaut
    NetworkCredential credential = new System.Net.NetworkCredential("user", "password");
    cela ne te sers à rien ici.

    essaye cela sinon tu met directement http://localhost/
    Merci d'utiliser en cas de résolution de votre problème

    N'oubliez pas non plus le petit pouce vert pour récompenser celui que vous a aidé

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Février 2005
    Messages
    172
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 172
    Points : 73
    Points
    73
    Par défaut
    voici le message d'erreur que j'obtient :


    System.IO.FileNotFoundException :
    at Microsoft.SharePoint.SPSite..ctor(SPFarm farm, Uri requestUri, Boolean contextSite, SPUserToken userToken)
    at Microsoft.SharePoint.SPSite..ctor(String requestUrl) at MyCompanyName.Service.HelperClass.GetItemStateInSharePoint(SharePointItem item) in C:\Workspaces\MyCompanyName\Development\Main\MyCompanyName.SharePoint\Service\HelperClass.cs:line 555

  10. #10
    Membre habitué
    Profil pro
    Inscrit en
    Août 2004
    Messages
    137
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Août 2004
    Messages : 137
    Points : 188
    Points
    188
    Par défaut
    Sur d'autres forums ils disent qu'il faut que le compte de l'app pool du Sharepoint doit avoir des droits d'accès total sur le Sql Server pour pouvoir accéder à distance via SPSite("http://votresite")... à tester !

  11. #11
    Expert confirmé Avatar de Lapinpanda
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2009
    Messages
    3 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Juin 2009
    Messages : 3 230
    Points : 4 913
    Points
    4 913
    Par défaut
    stardeus, essaye tu de developper avec l'API sharepoint depuis une machine autre que le server lui même?
    Merci d'utiliser en cas de résolution de votre problème

    N'oubliez pas non plus le petit pouce vert pour récompenser celui que vous a aidé

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Février 2005
    Messages
    172
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 172
    Points : 73
    Points
    73
    Par défaut
    c'est exact , ceci dit je l'ai testé également sur le serveur lui même.
    J'ai obtenu le même message d'erreur .

  13. #13
    Expert confirmé Avatar de Lapinpanda
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2009
    Messages
    3 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Juin 2009
    Messages : 3 230
    Points : 4 913
    Points
    4 913
    Par défaut
    string fullname = item.Attachments.UrlPrefix + name;
    SPFile files = item.Web.GetFile(fullname);
    C'est ici que ton code saute en principe, est ce que la fullname est bon?
    Merci d'utiliser en cas de résolution de votre problème

    N'oubliez pas non plus le petit pouce vert pour récompenser celui que vous a aidé

  14. #14
    Membre régulier
    Profil pro
    Inscrit en
    Février 2005
    Messages
    172
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 172
    Points : 73
    Points
    73
    Par défaut
    effectivement full n'est pas bon , une exception est levée

    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
     
                    string url = "http://localhost/sites/webapp";
                    using (SPSite site = new SPSite(url))
                    {
                        using (SPWeb web = site.OpenWeb())
                        {
                            SPList list = web.Lists["reception"];
                            SPListItemCollection listItems = list.Items;
                            foreach (SPListItem item in listItems)
                            {
     
                                Console.WriteLine(item.Url);
                                Console.WriteLine(item.Name);
                                SPFile file = item.Web.GetFile(item.Url);
                                file.moveto(??)
                                Console.ReadLine();
     
                            }
                        }
                    }
    je parviens à lire le contenu de la liste.
    Il semble qu'on peut déplacer un fichier vers un lien url.
    Je souhaiterai le déplacer dans un emplacement fixe.
    Comment dois je m'y prendre pour récupérer le fichier ?
    merci

  15. #15
    Expert confirmé Avatar de Lapinpanda
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2009
    Messages
    3 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Juin 2009
    Messages : 3 230
    Points : 4 913
    Points
    4 913
    Par défaut
    Tu veux avoir les fichiers en dur? sur ton disque?

    dans ce cas tu dois sortir du contexte sharepoint, et ne finir ton script en appelant les classes présente dans System.IO afin de générer tes fichiers.

    Je pense que la méthode SaveBinary du SPFIle objet réponds à ce besoin
    Merci d'utiliser en cas de résolution de votre problème

    N'oubliez pas non plus le petit pouce vert pour récompenser celui que vous a aidé

  16. #16
    Membre régulier
    Profil pro
    Inscrit en
    Février 2005
    Messages
    172
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 172
    Points : 73
    Points
    73
    Par défaut
    oui c'est bien ça je veux obtenir des fichiers en dure.
    Si j'ai bien compris, pour la suite du développement je devrais créer un tableau de byte de tel manière que la classe FILE du system.IO puisse effectuer ses traitement.

    dois je travailler en stream ou byte ?
    je suppose que j'aurais besoin de la classe memoryStream

  17. #17
    Expert confirmé Avatar de Lapinpanda
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2009
    Messages
    3 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Juin 2009
    Messages : 3 230
    Points : 4 913
    Points
    4 913
    Par défaut
    Travailler en byte ou en stream, si mes cours me revienne, je crois que les performances sont accrus pour les gros fichier pour les bytes.

    Et oui c'est probable que tu es as utilisé la classe MemoryStream(j'en sais rien ), je n'ai que trés rarement travailler sur la création de fichier, mais je l'ai déjà fait, et ce n'était ps du tout compliqué
    Merci d'utiliser en cas de résolution de votre problème

    N'oubliez pas non plus le petit pouce vert pour récompenser celui que vous a aidé

  18. #18
    Membre régulier
    Profil pro
    Inscrit en
    Février 2005
    Messages
    172
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 172
    Points : 73
    Points
    73
    Par défaut
    Je suis parvenu à pouvoir déplacer les fichiers dans le répertoire cible.
    ça marche correctement.
    Je voulais faire une mise à jour de la liste de SharePoint.
    En fait une fois que le fichier contenu dans la liste SharePoint a été déplacé dans le répertoire cible alors cette liste SharePoint ne devrait plus contenir le fichier.

    Ce que j'ai fait dans la boucle du foreach j'ai mis item.delete() ceci me génère une erreur.
    Tu m'a parlé de List.systemUpdate et item.Update je ne vois pas leur différence ?
    merci

  19. #19
    Expert confirmé Avatar de Lapinpanda
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2009
    Messages
    3 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Juin 2009
    Messages : 3 230
    Points : 4 913
    Points
    4 913
    Par défaut
    Ce que j'ai fait dans la boucle du foreach j'ai mis item.delete() ceci me génère une erreur.
    Sois précis...

    ensuite SystemUpdate(), moi je m'en sers pour l'interface sharepoint, pour ne pas avoir les Last Modified By xxx mais aussi parfois cela m'a résolu des problèmes bien bidon de non mise à jour en passant par Update();
    Merci d'utiliser en cas de résolution de votre problème

    N'oubliez pas non plus le petit pouce vert pour récompenser celui que vous a aidé

  20. #20
    Membre régulier
    Profil pro
    Inscrit en
    Février 2005
    Messages
    172
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 172
    Points : 73
    Points
    73
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SPFile file = item.Web.GetFile(item.Url);
                                //traitement du fichiers   
                                //ici je supprime l'element de la liste SharePoint après    le fichier ait été crée
                                item.delete();
     
     
                            }


    j'obtiens un erreur de ce type:

    à Microsoft.SharePoint.SPBaseCollection.SPEnumerator.System.Collections.IEnumerator.MoveNext()
    à ExtractList.Program.Main(String[] args) dans D:\SOURCE\ExtractList\Program.cs:ligne 28

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 2
    Dernier message: 16/09/2013, 16h45
  2. [XL-2007] Trouver un bout de code dans des fichiers Excel qui se trouve dans un répertoire
    Par Paloma dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 08/11/2010, 16h23
  3. Réponses: 7
    Dernier message: 10/10/2008, 16h05
  4. Réponses: 5
    Dernier message: 21/02/2007, 16h12
  5. Ouvrir un fichier excel à partir du contenu d'une cellule
    Par Lou12 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 07/07/2006, 13h28

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