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

VB.NET Discussion :

Enregistrer le contenu d'un tableau en fichier Exel


Sujet :

VB.NET

  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2013
    Messages : 84
    Par défaut Enregistrer le contenu d'un tableau en fichier Exel
    Bonjour, j'ai un petit problème pendant mon stage, je dois enregistrer les données présentes dans mon tableau (datagridview) en fichier excel. Mais hélas et malgré de multiples recherches et essai, je ne trouve absolument pas comment faire. Pouvez-vous me venir en aide? Je suis sous Visual Studio 2010.

    Merci d'avance!

  2. #2
    Membre Expert Avatar de _Ez3kiel
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2013
    Messages
    836
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2013
    Messages : 836
    Par défaut
    http://faqvbnet.developpez.com/?page...dgrid_to_excel

    C'est pour un DataGrid, mais je suppose que le DataGridView implémente les fonctions de son prédécesseur ... Et apparemment ce n'est pas pour une quantité excessive de données.

    Sinon sur Google on trouve plein de choses, vrai de vrai.
    (Par ex: http://vb.net-informations.com/excel...w_to_excel.htm pas testé, mais c'est qu'un exemple ...)

  3. #3
    Membre à l'essai Avatar de DocBS
    Homme Profil pro
    Ingénieur Recherche
    Inscrit en
    Mai 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur Recherche
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2013
    Messages : 7
    Par défaut Datagridview vers Excel via RichTextBox
    J'ai adapté la solution que j'ai trouvé pour le transfert d'un DataTable vers Excel.
    ( voir ici :
    http://http://www.developpez.net/forums/d747446/dotnet/developpement-windows/windows-forms/exporter-datatable-vers-excel/ )

    Je passe par une RichTextBox (qui doit rester invisible) dont on peut facilement copier le contenu dans le presse-papier.

    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
    Dim out As String
    Dim excelapp As New Excel.Application
    Dim wb As Excel.Workbook
    Dim ws As Excel.Worksheet
     
     
    out = String.Join(vbTab, Me.DataGridView1.Columns.Cast(Of DataGridViewColumn)().Select(Function(d) d.Name).ToArray())
    me.RichTextBox1.AppendText(out + vbNewLine)
    For Each rw As DataGridViewRow In Me.DataGridView1.Rows
         out = String.Join(vbTab, rw.Cells.Cast(Of System.Windows.Forms.DataGridViewTextBoxCell)().Select(Function(s) System.Convert.ToString(s.Value)).ToArray)
         out = out.Replace(",", ".")
         me.RichTextBox1.AppendText(out + vbNewLine)
    Next
     
    wb = excelapp.Workbooks.Add
    ws = wb.Worksheets.Add()
    me.RichTextBox1.SelectAll()
    me.RichTextBox1.Cut()
    ws.Range("A1").Select()
    ws.Paste()

  4. #4
    Membre expérimenté
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Par défaut
    Si on ne doit pas s'embêter à formater le document Excel, voici une méthode simple et plus rapide que de copier cellule par cellule.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    monDGV.SelectAll()
    Clipboard.SetDataObject(monDGV.GetClipboardContent)
    'initialisation d'Excel
    xlSheet.Paste(xlSheet.Range("A1"))
    où monDGV est un contrôle de type DataGridView et xlSheet est un objet de type Microsoft.Office.Interop.Excel.Worksheet.

    Pour ce qui est de l'initialisation d'Excel, les réponses ont déjà été données.

    P.S. : Ne pas oublié à la fin de soit rendre Excel visible pour que l'utilisateur puisse fermer le processus lui-même, soit de libérer les ressources utilisées pour Excel sinon le processus ne se fermera jamais (sauf au shutdown de la machine).

  5. #5
    Membre à l'essai Avatar de DocBS
    Homme Profil pro
    Ingénieur Recherche
    Inscrit en
    Mai 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur Recherche
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2013
    Messages : 7
    Par défaut
    J'ai testé la solution de Kropernic avec un DataGridView rempli de Doubles.
    La commande Paste ne colle alors pas correctement les valeurs dans la feuille Excel.
    Cependant, si je fais ensuite un CTRL-V pour coller les mêmes données manuellement,
    les valeurs s'affichent correctement dans la feuille. Mystère !

  6. #6
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2013
    Messages : 84
    Par défaut
    Excusez moi de ne pas avoir répondu tout de suite.
    Alors j'ai fais plusieurs test, je pense que je m'y rapproche cependant j'ai des erreurs qui surviennent, voila mon code d'enregistrement :

    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
     
    Private Sub XMLToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles EnregistrerToolStripMenuItem.Click
            Dim ds As DataSet = DataGridView1.DataSource
            Try
                With SaveTab
                    .Title = "Enregistrer"
                    .InitialDirectory = "\\"
                    .Filter = "Fichier XML (.xml)|*.xml|Tous les fichiers|*.*"
                    .DefaultExt = "xml"
                    .AddExtension = True
                End With
     
                If SaveTab.ShowDialog = Windows.Forms.DialogResult.OK Then
                    If SaveTab.FileName.ToString <> "" Then
                        ds.WriteXml(SaveTab.FileName, XmlWriteMode.IgnoreSchema)
                    End If
                End If
            Catch ex As Exception
                MessageBox.Show(ex.Message)
            End Try
        End Sub
    Cependant il me génère une erreur à le ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ds.WriteXml(SaveTab.FileName, XmlWriteMode.IgnoreSchema)
    Enfin je pense que ce doit être un problème de création de fichier, car même s'il à un problème de récupération de données, il devrait en principe me créer au moins un fichier, chose qu'il ne fait pas!

  7. #7
    Membre à l'essai Avatar de DocBS
    Homme Profil pro
    Ingénieur Recherche
    Inscrit en
    Mai 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur Recherche
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2013
    Messages : 7
    Par défaut
    C'est quoi le lien avec l'export vers Excel ?

  8. #8
    Membre à l'essai Avatar de DocBS
    Homme Profil pro
    Ingénieur Recherche
    Inscrit en
    Mai 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur Recherche
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2013
    Messages : 7
    Par défaut Une autre solution
    Parcourir les cellules dans des boucles est assez lent. On peut faire un copier coller, plus rapide.

    ws est la feuille de calcul.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
            Me.DataGridView1.SelectAll()
            Clipboard.SetDataObject(DataGridView1.GetClipboardContent)
            ws.Range("A1").Select()
            ws.PasteSpecial(Format:="HTML")
    C'est presque la même solution que celle donnée plus haut par Kropernic. Cependant, selon les données il peut être avantageux de les coller en format HTML.

    Attention également quand il y a des données DATETIME ! La meilleure solution que j'ai trouvée dans ce cas, est de les enregistrer au format double (DateTime.ToOADate) dans le DataGridView. Après le transfert dans Excel, modifiez le format de la colonne qui contient ces données. Par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ws.Range("A:A").NumberFormat = "dd/MM/yy hh:mm:ss"

Discussions similaires

  1. Réponses: 3
    Dernier message: 29/12/2014, 18h30
  2. [Débutant] Enregistrer le contenu d'un tableau
    Par samiasamia dans le forum VB.NET
    Réponses: 6
    Dernier message: 19/04/2013, 09h43
  3. Enregistrer le contenu d'un tableau en BDD
    Par albund dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 18/07/2012, 15h58
  4. Enregistre le contenu de textarea dans un fichier texte
    Par Rahim-US dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 17/08/2010, 22h05
  5. Enregistrer le contenu d'un tableau dans un fichier
    Par solicel dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 16/11/2009, 16h50

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