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 :

Fichier excel à partir de DataTable error Get_range


Sujet :

C#

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    202
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 202
    Par défaut Fichier excel à partir de DataTable error Get_range
    Bonjour,
    je souhaiterais créer un fichier excel à partir d'une liste d'objets. Je n'arrive pas trop à trouver d'indication sur le forum et sur internet car je trouve majoritairement des informations pour créer un fichier excel à partir d'un datatable seulement.
    Quelqu'un aurait-il des infos là dessus ?
    Merci d'avance

  2. #2
    Membre émérite

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2011
    Messages
    487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2011
    Messages : 487
    Par défaut
    Une solution est de créer une classe qui possède une méthode avec une collection de tes objets en entrée.
    Ensuite tu les parcours et tu les ajoutes à une string que tu enregistreras dans un fichier.

    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
     
    SEPARATOR = ',';
     
    public void Serialize(List<MyObject> myObjects)
    {
    String csv = String.Empty;
     
    foreach(MyObject myObject in myObjects)
    {
    csv += myObject.Value1 + SEPARATOR;
    csv += myObject.Value2 + SEPARATOR;
    csv += myObject.Value3 + SEPARATOR;
    csv += myObject.Value4 + SEPARATOR;
    csv += myObject.Value5 + SEPARATOR;
    csv += Environnement.NewLine;
    }
     
    }
    Ensuite ta string csv contient les champs de tes objets séparés par le délimiteur csv de ton choix (',' ou ';') et un saut de ligne entre chaque.
    Après, il ne te reste plus qu'à utiliser un Writer pour enregistrer ça dans un fichier dont l'extension sera .csv
    Mon blog sur les technos .NET et Agile -> http://blog.developpez.com/maximepalmisano/

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    202
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 202
    Par défaut
    Bon j'ai fait tout autrement:

    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
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
            private void button1_Click(object sender, EventArgs e)
            {
     
                DataTable dt = Tbl_Courbe_Excel(CurrentGraphItems);
                Excel.Application oXL;
                Excel.Workbook oWB;
                Excel.Worksheet oSheet;
                Excel.Range oRange;
     
                // Start Excel and get Application object.
                oXL = new Excel.Application();
     
                // Set some properties
                oXL.Visible = true;
                oXL.DisplayAlerts = false;
     
                // Get a new workbook.
                oWB = oXL.Workbooks.Add(Missing.Value);
     
                // Get the active sheet
                oSheet = (Excel.Worksheet)oWB.ActiveSheet;
                oSheet.Name = "Customers";
     
     
     
                int rowCount = 1;
                foreach (DataRow dr in dt.Rows)
                {
                    rowCount += 1;
                    for (int i = 1; i < dt.Columns.Count + 1; i++)
                    {
                        // Add the header the first time through
                        if (rowCount == 2)
                        {
                            oSheet.Cells[1, i] = dt.Columns[i - 1].ColumnName;
                        }
                        oSheet.Cells[rowCount, i] = dr[i - 1].ToString();
                    }
                }
     
                // Resize the columns
     
                oRange = oSheet.get_Range(oSheet.Cells[1, 1],
                              oSheet.Cells[rowCount, dt.Columns.Count]);
                oRange.EntireColumn.AutoFit();
     
                // Save the sheet and close
                oSheet = null;
                oRange = null;
                oWB.SaveAs("test.xls", Excel.XlFileFormat.xlWorkbookNormal,
                    Missing.Value, Missing.Value, Missing.Value, Missing.Value,
                    Excel.XlSaveAsAccessMode.xlExclusive,
                    Missing.Value, Missing.Value, Missing.Value,
                    Missing.Value, Missing.Value);
                oWB.Close(Missing.Value, Missing.Value, Missing.Value);
                oWB = null;
                oXL.Quit();
     
                // Clean up
                // NOTE: When in release mode, this does the trick
                GC.WaitForPendingFinalizers();
                GC.Collect();
                GC.WaitForPendingFinalizers();
                GC.Collect();
     
            }
    Le fichier excel est bien généré mais j'ai un message d'erreur:

    L'exception RuntimeBinderException n'a pas été gérée
    'Object' ne contient pas de définition pour get_Range
    Quelqu'un a une idée pour résoudre ce problème?
    Merci d'avance.

Discussions similaires

  1. Réponses: 2
    Dernier message: 19/07/2011, 11h53
  2. Lancement d'un fichier Excel à partir d'Access
    Par Golork dans le forum Access
    Réponses: 5
    Dernier message: 18/03/2010, 12h45
  3. Réponses: 1
    Dernier message: 05/07/2008, 09h55
  4. Réponses: 4
    Dernier message: 02/05/2005, 21h25
  5. Réponses: 2
    Dernier message: 06/04/2005, 13h01

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