Pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter, inscrivez-vous gratuitement !

 

  1. #1
    Expert éminent sénior
    Avatar de dysorthographie
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    avril 2012
    Messages
    9 398
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : avril 2012
    Messages : 9 398
    Points : 16 025
    Points
    16 025
    Billets dans le blog
    1

    Par défaut Envoyer un DataTable vers Excel!

    Bonjour,
    Je suis dépité! plus j'utilise VB.Net plus j’apprécie Vb6!

    en effet en utilisant AdoDb.RocordSet il me suffit de faire CopyFromRecordset dans Excel pour remplir ma feuille.
    si jutilise un DataTable il me faut 5 minutes pour faire un traitement qui me prenais une fraction de secondes?????
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Using dataadapter As New SqlDataAdapter
                dataadapter.SelectCommand = New SqlCommand( _
                   Sql, _SQLConn)
                Using ds As New DataTable()
                    dataadapter.Fill(ds)
                    Return ds
                End Using
            End Using
    voila mon code
    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
    Private Sub ExportXls(ByRef dt As DataTable, ByRef S As Object, ByVal r As Integer, ByVal c As Integer)
            Dim rowIndex As Integer = r : Dim colIndex As Integer = c
            For Each dr In dt.Rows
                colIndex = 0
                For Each dc In dt.Columns
                    If rowIndex = r Then
                        S.cells(rowIndex, 1 + colIndex).value = "Action"
                        If colIndex <> 0 Then S.cells(rowIndex, 1 + colIndex).value = dc.ColumnName.ToString
     
                    End If
                    S.cells(rowIndex + 1, 1 + colIndex).value = "'" + dr(dc.ColumnName).ToString
                    colIndex += 1
                Next
                rowIndex += 1
            Next
        End Sub
    Il dit non avec la tête
    mais il dit oui avec le coeur
    il dit oui à ce qu’il aime
    il dit non au professeur {Jacques PRÉVERT}

  2. #2
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    décembre 2011
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : décembre 2011
    Messages : 1
    Points : 1
    Points
    1

    Par défaut Avez vous trouvé une nouvelle méthode?

    Bonjour,

    J'ai la même problématique que celle que vous exposez et je voulais savoir si vous avez trouvé une solution

    J'utilise un programme pour créer des fichiers Excel à partir de données SQL que je récupère dans un datatable (ou une liste peu importe)
    Les données sont écrites dans Excel avec des boucles lignes colonnes ça fonctionne.
    vu la volumétrie cela dure beaucoup trop longtemps
    J'ai essayé d'utiliser le presse papiers mais quand je colle les données , j'ai une erreur COM

    Avez vous trouvé une méthode
    Merci

  3. #3
    Membre éclairé Avatar de star
    Homme Profil pro
    .
    Inscrit en
    février 2004
    Messages
    720
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Corée Du Nord

    Informations professionnelles :
    Activité : .

    Informations forums :
    Inscription : février 2004
    Messages : 720
    Points : 872
    Points
    872

    Par défaut

    Juste une question : Pourquoi ne pas extraire les données directement avec les fonctionnalités d'interrogation de bases de données de MS Excel plutôt que de développer une application ?
    .
    Pour la défense de nos droits, merci de voter pour : https://connect.microsoft.com/Visual...wupdated-event
    together we stand, divided we fall
    .

  4. #4
    Expert éminent sénior
    Avatar de dysorthographie
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    avril 2012
    Messages
    9 398
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : avril 2012
    Messages : 9 398
    Points : 16 025
    Points
    16 025
    Billets dans le blog
    1

    Par défaut

    Bonjour,
    J'ai résolu mon problème par l'absurde!

    Personnellement il n'ai pas question de faire une application qui extrait de données sql serveur vers Excel (État en directions des utilisateurs qui répertorieles.modification opérées), mais un fonctionnalité d'une application bien plus conséquente!

    J'ai essayé d'utiliser le presse papiers mais quand je colle les données , j'ai une erreur COM
    Oui moi également! Le comble c'est sur les icones copier/coller!
    Il dit non avec la tête
    mais il dit oui avec le coeur
    il dit oui à ce qu’il aime
    il dit non au professeur {Jacques PRÉVERT}

  5. #5
    Expert éminent

    Homme Profil pro
    Développeur .NET
    Inscrit en
    janvier 2012
    Messages
    4 324
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : Canada

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

    Informations forums :
    Inscription : janvier 2012
    Messages : 4 324
    Points : 8 995
    Points
    8 995
    Billets dans le blog
    23

    Par défaut

    Citation Envoyé par dmoya Voir le message
    Bonjour,

    J'ai la même problématique que celle que vous exposez et je voulais savoir si vous avez trouvé une solution
    Finalement la question demeure Résolu ou pas ?

    Lecture et exemples :

    https://code.msdn.microsoft.com/Expo...ct-to-b3e2c1f0

    https://code.msdn.microsoft.com/Exce...cs-to-95adc5a1

    https://www.codeproject.com/Articles...able-and-Datag


    Et puis, j'ai la flemme de chercher à la place des autres. En raccourcissant les liens dans ton navigateur Internet, tu devrais pouvoir remonter à MSDN et son moteur de recherche (Bing en fait) et à CodeProject et son moteur de recherche.
    À ma connaissance, le seul personnage qui a été diagnostiqué comme étant allergique au mot effort. c'est Gaston Lagaffe.

    Ô Saint Excel, Grand Dieu de l'Inutile.

    Excel n'a jamais été, n'est pas et ne sera jamais un SGBD, c'est pour cela que Excel s'appelle Excel et ne s'appelle pas Access junior.

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    octobre 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : octobre 2012
    Messages : 2
    Points : 5
    Points
    5

    Par défaut

    En utilisant la propriété ItemArray de l'objet DataRow, on récupère toutes les données de la ligne dans un tableau qu'on affecte à la plage de cellules dimensionnée en conséquence.
    Cette méthode oblige à parcourir toutes les lignes mais pas chaque colonne de la DataTable, ce qui divise d'autant le temps de traitement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Dim xl As New Microsoft.Office.Interop.Excel.Application
    Dim wb As Microsoft.Office.Interop.Excel.Workbook
    Dim ws As Microsoft.Office.Interop.Excel.Worksheet
    Dim col as integer, i as integer
     
    wb = xl.Workbooks.Add
    ws = wb.Worksheets.Add
    col = DataRow In MonDataSet.Tables("MaTable").Columns.count
     
    i = 1
    For Each dr As DataRow In MonDataSet.Tables("MaTable").Rows
        i = i + 1
        ws.Range(ws.Cells(i, 1), ws.Cells(i, col)).Value = dr.ItemArray
    Next
    Une autre solution en utilisant xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim xl As New Microsoft.Office.Interop.Excel.Application
    Dim Fichier As String = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) & "\monFichier.xml"
    MonDataSet.Tables("MaTable").WriteXml(Fichier)
    xl.DisplayAlerts = False
    xl.Workbooks.OpenXML(Fichier, , 2)
    xl.DisplayAlerts = True
    xl.visible = True

  7. #7
    Expert éminent sénior
    Avatar de dysorthographie
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    avril 2012
    Messages
    9 398
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : avril 2012
    Messages : 9 398
    Points : 16 025
    Points
    16 025
    Billets dans le blog
    1

    Par défaut

    Bonsoir,
    Personnellement j'avais utilisé un des exemples don Clément nous à fourni le lien , à savoir le presse papier.

    Pour finir sur la bonne vielle méthode Ado, qui est pourtant a proscrire avec un CopyFromRecordSet dans Excel.

    Il m'est insupportable de parcourir celulle par celulle un datatable en programmation objet avec un temps de traitement excessivement long alors que la vielle technologie le gère sens problème.

    Voila absurde non?

    En revanche j'envisage d'évoluer vers cristal reporte.
    Il dit non avec la tête
    mais il dit oui avec le coeur
    il dit oui à ce qu’il aime
    il dit non au professeur {Jacques PRÉVERT}

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

Discussions similaires

  1. Exporter Datatable vers Excel
    Par Chris@Xerox dans le forum Windows Forms
    Réponses: 15
    Dernier message: 27/05/2013, 11h54
  2. exporter une datatable vers excel
    Par lady sina dans le forum JSF
    Réponses: 5
    Dernier message: 20/06/2012, 10h38
  3. exporter un rich datatable vers excel
    Par khaled84 dans le forum Documents
    Réponses: 6
    Dernier message: 17/01/2011, 18h43
  4. C#: exportation d'un DataTable vers Excel
    Par Leelith dans le forum Windows Forms
    Réponses: 4
    Dernier message: 08/02/2010, 19h05
  5. datatable vers excel
    Par tortuegenie dans le forum ASP.NET
    Réponses: 3
    Dernier message: 13/08/2009, 16h41

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