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

C# Discussion :

Creation d'un fichier Excel à partir d'une ListView


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2007
    Messages : 125
    Par défaut Creation d'un fichier Excel à partir d'une ListView
    Bonjour,

    Dans le cadre d'un portage VB 6 vers C#, je cherche une solution rapide pour exporter une ListView (la ObjectListView CF ici) vers Excel:

    La liste peut-être assez impossante (5 à 6000 lignes et env. 20 Col)
    et l'affichage du fichier doit-être le plus rapide possible (la version VB fait ça en environ 2 secondes).

    La solution VB est la suivante:
    -créer un fichier CSV
    -l'ouvrir avec Excel (en mode non visible)
    -demander à Excel d'enregistrer en xls
    -faire un peut de formatage
    -Afficher Excel

    J'ai passé 2 jours tenter ça en C#, mais j'ai fini par abandonner: l'Automation étant trop mal documenté, impossible de trouver les parametres qu'il faut pour ouvrir le CSV comme il faut dans Excel.

    Je me suis donc tourné vers OleDb pour tout créer from Scratch direct en XLS, mais là (en dehors du fait que je sois obligé de parcourir mes objets un par un puisque c'est une ListView), autre problème: j'ai des simples quotes qui apparaissent dans mes champs texte...

    J'avoue que je commence à désespérer..

    QUESTION:
    -Quelqu'un aurait-il une solution élégante pour faire ça ?




    Merci d'avance pour toute aide / idée / proposition... !

  2. #2
    Membre émérite
    Homme Profil pro
    Inscrit en
    Février 2006
    Messages
    943
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Février 2006
    Messages : 943
    Par défaut
    passe par les composants COM de office.

    Microsoft.Office.Interop.Excel;

    tu créé un EXCEL et le remplit en 20lignes de codes

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2007
    Messages : 125
    Par défaut
    C'était effecivement ma première idée, mais j'avais peur que ce soit long s'il y a beaucoup de données..

    Par ailleurs, comme c'est en environement pro, j'essaie de ne pas installer d'autre DLL que celles des postes et j'avais donc effectivement tenté de travailler avec les composants COM "Microsoft Excel 11.0 Object Library". Mais j'avoue qu'après pas mal de tests, passer son temps à chercher quel "object" va pour quel paramètre, et toujours avoir des messages d'erreur abscons, j'ai fini par abandonner...
    Est-ce tu connais un tuto qui donne des exemples qui marchent avec cette version des composants COM ?

    Sinon, je vois aussi que dans les References .Net, j'ai les entrées "Microsoft.Office.Interop.Excel" version 11.0 et 12.0
    Quelles différences avec les composants COM ? Est-ce que c'est utilisable "facilement" sur des postes sans Visual Studio ?

    Merci d'avance

  4. #4
    Membre émérite
    Homme Profil pro
    Inscrit en
    Février 2006
    Messages
    943
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Février 2006
    Messages : 943
    Par défaut
    Vite fait:

    Tu importe juste la v12 et c'est partie

    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
     
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using Microsoft.Office.Interop.Excel;
     
    using Excel = Microsoft.Office.Interop.Excel;
     
    namespace test
    {
        public class ToExcel
        {
     
     
            public ToExcel()
            {
                Excel.Application ObjExcel = new Microsoft.Office.Interop.Excel.Application();
     
                string model = @"C:\template.xls";
                string pathDestination = @"C:\target.xls";
     
                Excel.Workbook ObjWorkBookTemp = ObjExcel.Workbooks.Open(model, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
                Excel.Worksheet wh1 = (Excel.Worksheet)ObjWorkBookTemp.Sheets[1];
     
                //wh1.get_Range("A" + 1, Type.Missing).Value2 = string.Format("COUCOU");
     
                ObjWorkBookTemp.SaveAs(pathDestination, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Excel.XlSaveAsAccessMode.xlNoChange, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
     
                ObjWorkBookTemp.Close(false, Type.Missing, Type.Missing);
            }
     
     
        }
    }

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2007
    Messages : 125
    Par défaut
    Merci de prendre de ton temps ash.ice.loky, tout seul, je commençait à perdre patience...

    J'ai testé ce que tu proposes et je retombe sur une erreur (que je commence à voir un peu trop souvent):
    Ancien format ou bibliothèque de types non valide. (Exception de HRESULT : 0x80028018 (TYPE_E_INVDATAREAD))
    au moment de l'open(..)
    Je précise que j'ai créé un fichier excel "template.xls" vide pour le test...
    (Mon Excel étant celui d'office 2003).

    Any suggestion ?

  6. #6
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 488
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 488

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 12/01/2009, 22h37
  2. création fichier Excel à partir d'une application WPF
    Par modafine dans le forum Windows Presentation Foundation
    Réponses: 8
    Dernier message: 01/08/2008, 08h53
  3. Ouverture de fichier Excel à partir d'une page en PHP
    Par leclone dans le forum Langage
    Réponses: 15
    Dernier message: 03/01/2007, 18h00
  4. Réponses: 1
    Dernier message: 23/09/2006, 14h12
  5. Réponses: 4
    Dernier message: 02/05/2005, 20h25

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