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

WinDev Discussion :

EPPlus, comment utiliser cet assemblage .NET pour manipuler des fichiers Excel ? [WD18]


Sujet :

WinDev

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Homme Profil pro
    Responsable produit
    Inscrit en
    Mars 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Responsable produit

    Informations forums :
    Inscription : Mars 2016
    Messages : 5
    Par défaut EPPlus, comment utiliser cet assemblage .NET pour manipuler des fichiers Excel ?
    Bonjour,

    Avant de vous exposer mon problème, je précise que je ne souhaite pas une solution de contournement (pilotage d'Excel, autre assemblage .NET, etc...).


    J'ai tenté, en vain, d'utiliser l'assemblage .NET EPPlus dans un projet WinDev. (http://epplus.codeplex.com/)
    Cet assemblage permet de manipuler (modifier, créer) des fichiers Excel au format OpenXML.

    J'ai essayé de reproduire cet exemple C# en WLangage :



    Code C# : 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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    FileInfo newFile = new FileInfo(outputDir.FullName + @"\sample1.xlsx");
    if (newFile.Exists)
    {
    newFile.Delete(); // ensures we create a new workbook
    newFile = new FileInfo(outputDir.FullName + @"\sample1.xlsx");
    }
    using (ExcelPackage package = new ExcelPackage(newFile))
    {
    // add a new worksheet to the empty workbook
    ExcelWorksheet worksheet = package.Workbook.Worksheets.Add("Inventory");
    //Add the headers
    worksheet.Cells[1, 1].Value = "ID";
    worksheet.Cells[1, 2].Value = "Product";
    worksheet.Cells[1, 3].Value = "Quantity";
    worksheet.Cells[1, 4].Value = "Price";
    worksheet.Cells[1, 5].Value = "Value";
     
    //Add some items...
    worksheet.Cells["A2"].Value = 12001;
    worksheet.Cells["B2"].Value = "Nails";
    worksheet.Cells["C2"].Value = 37;
    worksheet.Cells["D2"].Value = 3.99;
     
    worksheet.Cells["A3"].Value = 12002;
    worksheet.Cells["B3"].Value = "Hammer";
    worksheet.Cells["C3"].Value = 5;
    worksheet.Cells["D3"].Value = 12.10;
     
    worksheet.Cells["A4"].Value = 12003;
    worksheet.Cells["B4"].Value = "Saw";
    worksheet.Cells["C4"].Value = 12;
    worksheet.Cells["D4"].Value = 15.37;
     
    //Create an autofilter for the range
    worksheet.Cells["A1:E4"].AutoFilter = true;
     
    worksheet.Cells.AutoFitColumns(0); //Autofit columns for all cells
     
    // Change the sheet view to show it in page layout mode
    worksheet.View.PageLayoutView = true;
     
    // save our new workbook and we are done!
    package.Save();
     
    }



    J'ai donc fait ceci dans WinDev :

    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
     
    LOCAL
    clFichier est un FileInfo ("c:\epplus_test.xlsx")
    clXlsPack est un ExcelPackage(clFichier)
    pclXlsFeuille est un ExcelWorksheet dynamique
     
     
    pclXlsFeuille = clXlsPack.Workbook.Worksheets.Add("Inventory")
     
    //Add the headers
    pclXlsFeuille.Cells[1, 1].Value = "ID"
    pclXlsFeuille.Cells[1, 2].Value = "Product"
    pclXlsFeuille.Cells[1, 3].Value = "Quantity"
    pclXlsFeuille.Cells[1, 4].Value = "Price"
    pclXlsFeuille.Cells[1, 5].Value = "Value"
     
    //Add some items...
    pclXlsFeuille.Cells["A2"].Value = 12001
    pclXlsFeuille.Cells["B2"].Value = "Nails"
    pclXlsFeuille.Cells["C2"].Value = 37
    pclXlsFeuille.Cells["D2"].Value = 3.99
     
    pclXlsFeuille.Cells["A3"].Value = 12002
    pclXlsFeuille.Cells["B3"].Value = "Hammer"
    pclXlsFeuille.Cells["C3"].Value = 5
    pclXlsFeuille.Cells["D3"].Value = 12.10
     
    pclXlsFeuille.Cells["A4"].Value = 12003
    pclXlsFeuille.Cells["B4"].Value = "Saw"
    pclXlsFeuille.Cells["C4"].Value = 12
    pclXlsFeuille.Cells["D4"].Value = 15.37
     
    //Create an autofilter for the range
    pclXlsFeuille.Cells["A1:E4"].AutoFilter = Vrai
    pclXlsFeuille.Cells.AutoFitColumns(0) //Autofit columns for all cells
     
    // Change the sheet view to show it in page layout mode
    pclXlsFeuille.View.PageLayoutView = Vrai
     
    // save our new workbook and we are done!
    clXlsPack.Save()

    Le problème c'est que j'ai l'erreur de compilation suivante sur chaque ligne où j'affecte une valeur au membre Cells de pclXlsFeuille :
    Erreur :Le membre 'Cells' de la classe 'ExcelWorksheet' est constant : il n'est donc accessible qu'en lecture hors des méthodes de la classe 'ExcelWorksheet'.


    Aurais-je commis une erreur ?
    Est-ce que quelqu'un aurait une solution, s'il vous plaît ?

    Merci.

  2. #2
    Expert confirmé
    Avatar de frenchsting
    Homme Profil pro
    multitâches-multifonctions
    Inscrit en
    Juin 2003
    Messages
    5 567
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : multitâches-multifonctions
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 567
    Par défaut
    Essaye en remplaçant tes points par des double-chevrons :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pclXlsFeuille>>Cells[1, 1]>>Value = "ID"

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Responsable produit
    Inscrit en
    Mars 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Responsable produit

    Informations forums :
    Inscription : Mars 2016
    Messages : 5
    Par défaut
    Citation Envoyé par frenchsting Voir le message
    Essaye en remplaçant tes points par des double-chevrons :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pclXlsFeuille>>Cells[1, 1]>>Value = "ID"
    Merci.
    C'est une bonne idée.
    Malheureusement cela ne fonctionne pas : Erreur :Opérateur '>>' interdit.

    Je pense que les doubles chevrons s'utilisent uniquement avec des objets de type automation, OLE ou ActiveX.

  4. #4
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 244
    Par défaut
    hello,
    pour écrire des valeurs dans des cellules, tu peux utiliser la méthode setValue comme ceci par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    // écriture de la chaîne "ID" dans la cellule A1 du classeur
    pclXlsFeuille.setValue("A1", "ID")
    // ou 
    // pclXlsFeuille.setValue(1,1, "ID")
    Ami calmant, J.P

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Responsable produit
    Inscrit en
    Mars 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Responsable produit

    Informations forums :
    Inscription : Mars 2016
    Messages : 5
    Par défaut
    Citation Envoyé par jurassic pork Voir le message
    hello,
    pour écrire des valeurs dans des cellules, tu peux utiliser la méthode setValue comme ceci par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    // écriture de la chaîne "ID" dans la cellule A1 du classeur
    pclXlsFeuille.setValue("A1", "ID")
    // ou 
    // pclXlsFeuille.setValue(1,1, "ID")
    Ami calmant, J.P

    Merci ça fonctionne parfaitement

    Mais il me reste une erreur que je n'ai pas réussi à résoudre sur la fonction qui permet d'appliquer un filtre sur les cellules de ma première ligne (A1, B1, C1 et D1).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    //Create an autofilter for the range
    pclXlsFeuille.Cells["A1:D1"].AutoFilter = Vrai
    Si tu as une idée je suis preneur.

  6. #6
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 244
    Par défaut
    hello,
    finalement j'ai trouvé un équivalent qui fonctionne à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pclXlsFeuille.Cells["A1"].Value = "ID"
    c'est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pclXlsFeuille.Cells.get_Item("A1").Value = "ID"
    donc tu peux faire pour l'autofiltre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pclXlsFeuille.Cells.get_Item("A1:D1").AutoFilter = Vrai
    Ami calmant, J.P

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 8
    Par défaut question
    Bonjour
    le code windev semble ne pas fonctionner en wd28.
    la première ligne je ne la comprends pas et ne passe pas en compile.
    si vous avec un exemple fonctionnel epplus.
    merci

  8. #8
    Expert confirmé
    Avatar de frenchsting
    Homme Profil pro
    multitâches-multifonctions
    Inscrit en
    Juin 2003
    Messages
    5 567
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : multitâches-multifonctions
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 567
    Par défaut
    Bonjour,

    Le sujet est ancien et depuis, le champ tableur a été créé par PCSOFT. A voir si cela peut te convenir.

    Tu as aussi la possibilité de piloter Excel via OLE.

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 8
    Par défaut epplus
    Bonjour
    le champ tableur ne convient pas (il est limité)
    et le but c’est de ce passer d’excel donc pas de pilotage ole.

  10. #10
    Expert confirmé
    Avatar de frenchsting
    Homme Profil pro
    multitâches-multifonctions
    Inscrit en
    Juin 2003
    Messages
    5 567
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : multitâches-multifonctions
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 567
    Par défaut
    Bonjour,

    La version actuelle de l'assemblage .Net d'aujourd'hui n'est pas la même que celle utilisée dans les bouts de code présentés ici.
    Il est fort possible qu'il y ait des dépendances.
    Tu n'as pas mis le message d'erreur que tu as. Cela pourrait aider à te guider

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 8
    Par défaut epplus
    Bonjour
    mon premier problème c’est que cela ne compile pas l’instruction fileinfo, si quelqu’un a une idée.
    merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 29/12/2021, 17h13
  2. Réponses: 4
    Dernier message: 15/04/2016, 12h06
  3. Réponses: 2
    Dernier message: 14/05/2006, 19h36

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