begin process at 2010 03 14 15:14:16
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Trucs & Astuces

 > GÉNÉRER UN FICHIER EXCEL À PARTIR D'UN DATASET

GÉNÉRER UN FICHIER EXCEL À PARTIR D'UN DATASET


 Information sur la source

Note :
8,75 / 10 - par 4 personnes
8,75 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Trucs & Astuces Source .NET ( DotNet ) Classé sous :excel, dataset, générateur, fichier Niveau :Initié Date de création :07/09/2005 Date de mise à jour :09/09/2005 00:55:45 Vu / téléchargé :19 369 / 1 532

Auteur : rahou

Ecrire un message privé
Site perso
Commentaire sur cette source (16)
Ajouter un commentaire et/ou une note

 Description

Ce code permet de générer un fichier Excel à partir d'un DataSet qui est fourni en paramètre.

Source

  • Private Sub ExporterDataSetVersExcel(ByVal unDataSet As DataSet)
  • Dim CheminDuFichier As String
  • Dim myTable As DataTable
  • Dim myRow As DataRow
  • Dim myColumn As DataColumn
  • Dim i As Integer
  • SFDLogTraitement.Title = "Choisir un emplacement pour enregistrer le fichier Excel."
  • SFDLogTraitement.InitialDirectory = "c:\"
  • SFDLogTraitement.Filter = "Fichiers Excel (*.xls)|*.xls"
  • SFDLogTraitement.FilterIndex = 2
  • SFDLogTraitement.RestoreDirectory = True
  • If SFDLogTraitement.ShowDialog() = DialogResult.OK Then
  • CheminDuFichier = SFDLogTraitement.FileName
  • Try
  • Dim app As New Microsoft.Office.Interop.Excel.Application
  • Dim exbook As Microsoft.Office.Interop.Excel.Workbook
  • Dim exsheet As Microsoft.Office.Interop.Excel.Worksheet
  • exbook = app.Workbooks.Add
  • exsheet = exbook.Sheets(1)
  • i = 0
  • REM DEFINITION DES EN-TETE DE COLONNES
  • For Each myTable In unDataSet.Tables
  • For Each myColumn In myTable.Columns
  • exsheet.Cells(1, i + 1) = myTable.Columns(i).ColumnName
  • i = i + 1
  • Next
  • Next
  • Dim j As Integer
  • j = 2
  • REM CHARGEMENT DES DONNEES DANS LA FEUILLE EXCEL
  • For Each myTable In unDataSet.Tables
  • For Each myRow In myTable.Rows
  • i = 1
  • For Each myColumn In myTable.Columns
  • exsheet.Cells(j, i) = CType(myRow(myColumn) & "", String)
  • i += 1
  • Next myColumn
  • j += 1
  • Next myRow
  • Next myTable
  • exbook.SaveAs(CheminDuFichier)
  • app.Visible = True
  • Exit Sub
  • Catch ex As Exception
  • MessageBox.Show(ex.ToString)
  • End Try
  • End If
  • End Sub
Private Sub ExporterDataSetVersExcel(ByVal unDataSet As DataSet)
        Dim CheminDuFichier As String
        Dim myTable As DataTable
        Dim myRow As DataRow
        Dim myColumn As DataColumn
        Dim i As Integer
        SFDLogTraitement.Title = "Choisir un emplacement pour enregistrer le fichier Excel."
        SFDLogTraitement.InitialDirectory = "c:\"
        SFDLogTraitement.Filter = "Fichiers Excel (*.xls)|*.xls"
        SFDLogTraitement.FilterIndex = 2
        SFDLogTraitement.RestoreDirectory = True
        If SFDLogTraitement.ShowDialog() = DialogResult.OK Then
            CheminDuFichier = SFDLogTraitement.FileName
            Try
                Dim app As New Microsoft.Office.Interop.Excel.Application
                Dim exbook As Microsoft.Office.Interop.Excel.Workbook
                Dim exsheet As Microsoft.Office.Interop.Excel.Worksheet

                exbook = app.Workbooks.Add
                exsheet = exbook.Sheets(1)
                i = 0
                REM DEFINITION DES EN-TETE DE COLONNES
                For Each myTable In unDataSet.Tables
                    For Each myColumn In myTable.Columns
                        exsheet.Cells(1, i + 1) = myTable.Columns(i).ColumnName
                        i = i + 1
                    Next
                Next

                Dim j As Integer
                j = 2
                REM CHARGEMENT DES DONNEES DANS LA FEUILLE EXCEL
                For Each myTable In unDataSet.Tables
                    For Each myRow In myTable.Rows
                        i = 1
                        For Each myColumn In myTable.Columns
                            exsheet.Cells(j, i) = CType(myRow(myColumn) & "", String)
                            i += 1
                        Next myColumn
                        j += 1
                    Next myRow
                Next myTable

                exbook.SaveAs(CheminDuFichier)
                app.Visible = True
                Exit Sub
            Catch ex As Exception
                MessageBox.Show(ex.ToString)
            End Try
        End If
    End Sub

 Conclusion

Pour faire marcher le code il faudra penser à insérer dans le form qui va accueillir le code un composant "SAVE FILE DIALOG" que vous nommerez "SFDLogTraitement".

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

09 septembre 2005 00:55:45 :
J'ai essayé de vous faire un exemple du bout de code que j'ai posté. L'exemple permet de parcourir vos dossiers et de choisir une base de données Access, ensuite vous donnez le nom d'une des Tables, et avec le bouton "Générer DataSet", vous générez le DataSet. Et pour finir, cliquez sur "Généner Excel" pour générer le fichier Excel à partir du dataset. la prochaine fois, je vais modifier la source et liste la liste des tables qui sont contenues dans la base de données Access. A bientôt. (il fait nuit, je vais faire dodo). UneBase de données Exemple est fournie dans la Source et se trouve dans le dossier "Base de données" de la source.

 Sources du même auteur

Source avec Zip Source avec une capture Source .NET (Dotnet) DATASET, LISTVIEW ET EXCEL
SUPPRIMER LES DOUBLONS D'UNE TABLE SANS CLÉ

 Sources de la même categorie

Source avec Zip Source avec une capture JSON PARSER - ANALYSE DE CHAINES JSON par Renfield
Source avec Zip CREATION DE GADGET EN VB6 par djebbipgm
Source avec Zip Source avec une capture CAPTEUR DE HANDLE, DE TITRE, DE CLASS, DE POSITION DE TAILLE... par Sechaud
Source avec Zip Source avec une capture COULEUR DANS UN RICHTEXTBOX SANS MODIFIER SELSTART OU SELLEN... par Renfield
Source avec Zip Source avec une capture DIGIT D'AFFICHEUR LCD OCX par mays

 Sources en rapport avec celle ci

Source avec Zip OUVRIR TOUS LES FICHIERS EXCEL D'UN DOSSIER ET DE SES SOUS-D... par Unforgiven3303
Source avec Zip Source .NET (Dotnet) EXPORTER LE CONTENU D'UN DATAGRIDVIEW VERS EXCEL OU N IMPORT... par surfzoid
Source avec Zip Source avec une capture LISTER FICHIERS D'UN DOSSIER par fedexx40
Source avec Zip COMPARATEUR EXCEL EN MASSE, AMÉLIORATIONS par GMY
Source avec Zip [VBA-EXCEL] MODIFICATEUR DE FICHIER EXCEL par apache88

Commentaires et avis

Commentaire de JJDai le 08/09/2005 20:19:52

Il faut aussi ajouter une référence, mais je ne trouve pas la quelle, l'espace de nom:
Microsoft.Office.Interop.Excel
N'est pas reconnu

Commentaire de rahou le 08/09/2005 20:27:01

Il suffit juste de charger le composant Microsoft Excel, pour que la référence soit importée par défaut.

Commentaire de JJDai le 08/09/2005 21:37:24

La seule chose que j'ai trouvé concernant Excel c'est:
Microsoft Excel 9.0 object Library, et a priori c'est pas le bon.
J'ai offiche 2000 d'installé
Quel est ce composant dont tu parles ?

Commentaire de Charles Racaud le 08/09/2005 21:46:18

J'ai le même pb.
La source m'intéresse. Pourrait tu mettre un zip avec les dll manquantes stp.

Commentaire de Charles Racaud le 09/09/2005 18:37:05

Manqueles références suivantes:
Excel
Microsoft.Office.Core
VBIDE
Il faudrait les mettre en copie locale ou alors indiquer un endroit ou les trouver. Ca n'a pas l'aire d'être des dll courantes.

Commentaire de rahou le 09/09/2005 20:07:58

Il suffit juste d'ajouter le composant Microsoft Excel.
Pour y arriver , il suffit d'aller sur le menu Outils>Ajouter références, Ensuite cliquez sur l'onglet "COM" et Chosir "Microsoft Excel 10" ou celle dont vous disposez. Et avec cela, ttes les références manquantes seront chargées.

Commentaire de JJDai le 09/09/2005 20:55:02

Désolé mais ca ne suffit pas car il n'apparait pas dans ma liste.
Je suppose peut être que c'est lors de l'installation d'office  qu'il faut installer ces composants , peut^tre dans les options d'installation ?

Commentaire de JJDai le 09/09/2005 22:04:11

Ca y est jai trouvé:
1 - Referencer dans l'onglet COM:
Microsoft Excel object Livrary X.0
X etant le numero de version installé sur le poste.
Cela va avoir pour conséquence de créer une DLL dans le répertoire "Bin" nommée "Interop.Excel.dll"

Ensuite modifier toutes les lignes de code:
Microsoft.Office.Interop.Excel.Application
en suppriment  le début "Microsoft.Office.Interop"


ce qui donne sur un échantillon
--------------------------------------
            Try
                Dim app As New Excel.Application
                Dim exbook As Excel.Workbook
                Dim exsheet As Excel.Worksheet

                exbook = app.Workbooks.Add
                exsheet = exbook.Sheets(1)
                i = 0
                REM DEFINITION DES EN-TETE DE COLONNES
                For Each myTable In unDataSet.Tables
                    For Each myColumn In myTable.Columns
                        exsheet.Cells(1, i + 1) = myTable.Columns(i).ColumnName
                        i = i + 1
                    Next
                Next

--------------------------------------

Et la ca marche très bien

Commentaire de JJDai le 09/09/2005 22:18:24

J'ai oublié un détail.
Su le site de developpez.com, il y a un excellent tutoriel qui traite du sujet, (pour Vb, C#), et téléchargeable en PDF.
Voici l'adresse:
http://dotnet.developpez.com/cours/office/
Merci J-M Rabilloud
Vous trouverez aussi ici toutes le DLL quipermette de piloter presque tout avec des exemples (bon c'est en anglais, mais avec un peu de patience c'est pas trop compliqué)
http://msdn.microsoft.com/library/default.asp?url=/downloads/list/office.asp

Commentaire de rahou le 10/09/2005 01:49:00

C'est cela la force de "Codes Sources", échanges et discussions.
PS: Merci  d'apporter des améliorations au code en donnant la liste des tables qui existes dans une base de données Access. Pour SQL SERVER et ORACLE, il n'y a pas de problèmes. Pour Sql Server , il existe la requête (select * from sysobjects where xtype='u') pour lister l'ensemble des tables d'une base de données. Et pour Oracle (SELECT TABLE_NAME FROM ALL_TABLES) pour renvoyer la liste des tables.
Pour Access je ne c pas (car n'étant pas une bd relationnelle).

Commentaire de JJDai le 10/09/2005 14:01:08

Faux, Acces est bien un base relationelle, certe pas aussi puisssante que oracle en terme de volumétrie, mais très souple et facile a metre en oeuvre.
Quoi qu'il en soit, de maniere générique, quelque soit le sgbr utilisé, l'utilisation de l'objet shéma de ADO permet de tout  récuperer d'une base de données, listes des tables, des vues, des index, ...

Commentaire de Benouille le 12/09/2005 00:29:42

Access n'est pas nue base de données c'est un fichier de données.

bon moi y a un truc qui me turlupine:
#                 For Each myTable In unDataSet.Tables
#                     For Each myRow In myTable.Rows
#                         i = 1
#                         For Each myColumn In myTable.Columns
#                             exsheet.Cells(j, i) = CType(myRow(myColumn) & "", String)
#                             i += 1
#                         Next myColumn
#                         j += 1
#                     Next myRow
#                 Next myTable

avec un for each matable je m'attends a ajouter une feuille a excell
parceque si y a 2 tables ça va réécrire sur la premiere non ?


la je peux pas tester je suis sur un vieux linux sans .net ni meme excel :D
et puis bon j'ai pas de gros de doutes non plus.

vb nouille, le roi de l'éppat'

Commentaire de BruNews le 12/09/2005 00:42:26 administrateur CS

Le format de fichier Access utilise le moteur Jet qui est tout à fait un moteur de base de données, le fait de tout mettre dans 1 seul fichier ne change rien à l'affaire. A l'intérieur y sont stockés les différentes tables, indexes, relations, etc... Un moteur SQL complet est aussi intégré.

Commentaire de lordskyser1 le 13/11/2005 18:52:15

Très bien comme petit exemple. Juste un petit défaut, lorsqu'on sélectionne une table d'une base, que l'on génère le dataset, il n'est pas possible par la suite de sélectionner une table d'une autre base et de générer un autre dataset pour l'exporter vers excel sans redémarrer l'application.

Commentaire de chaton76 le 20/04/2006 15:55:40

Pour répondre à Benouille, il est en effet impossible que ce code fonctionne avec plusieurs tables dans le dataSet. Si quelqu'un désire le code modifié en C# je vous l'envoie.

Commentaire de l0ren le 22/08/2007 14:16:22

Merci pour cette source.
Les références COM à rajouter sont :
Microsoft Office X.0 Object Library & Microsoft Excel X.0 Object Library

Vous devriez alors avoir Excel, Microsoft.Office.Core, stdole et VBIDE

J'ai modifier ta source pour qu'elle n'exporte qu'une table vers Excel :

    Private Sub ExporterDataSetVersExcel(ByVal myTable As DataTable, ByVal cheminFichier As String)

        Dim myRow As DataRow
        Dim myColumn As DataColumn

        Dim app As New Excel.Application
        Dim exbook As Excel.Workbook
        Dim exsheet As Excel.Worksheet

        Try
            exbook = app.Workbooks.Add
            exsheet = exbook.Sheets(1)

            Dim i, j As Integer

            For i = 0 To myTable.Columns.Count - 1
                exsheet.Cells(1, i + 1) = myTable.Columns(i).ColumnName
            Next

            Dim ligneDebut As Integer = 2
            For i = 0 To myTable.Rows.Count - 1
                For j = 0 To myTable.Columns.Count - 1
                    exsheet.Cells(ligneDebut + i, j + 1) = myTable.Rows(i)(j).ToString
                Next
            Next

            exbook.SaveAs(cheminFichier)

        Catch ex As Exception
            Throw ex
        Finally
            If Not exbook Is Nothing Then exbook.Close()
            If Not app Is Nothing Then app.Quit()
        End Try
    End Sub

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Charger fichier txt dans un dataset en vb net [ par Syphou ] Bonjour, Je possède un fichier au format txt contenant 30 000 articles. Le fichier est sutructuré en différente colonne séparée par une tabulation. Si exportre et importer des donnes de dataset vers fichier excel. [ par zozotsdimaroc ] salut tout le monde ,je sais que ce probleme exsit pq mais j trouve des codes de datagrid vers excel ,et ca fonctinne tres bien,mais pas avec datagri DataSet Excel [ par spike62300 ] Bonjour,  j'ai besoin de copier un dataset dans un document excel a créerComment faire?Je suis tombé sur des exemples mais ils expliqua Excel 2007 macro [ par akkuciha ] Bonjour à tous,J'ai besoins de votre aide pour un fichier excel 2007 que je doit formatter.dans mon fichier j'ai 3 colonne : Produit, Prix , Categorie [VBA-E] Comment convertir 3000 fichiers de .csv à .xls?? (Attention prise de tête!) [ par maximecdb ] Salut, Je suis en stage depuis 2 semaines, et l'un de mes premiers boulot est de concaténer plein de données a la suite et je piétine depuis deux jou Interdire impression fichier excel [ par nonoss56 ] Bonjour,Et oui je veux interdire l'impression d'un fichier. J'ai bien trouvé la petite macro qui va bien à mettre dans ThisWorkbook:Private Sub Workbo Automatisation de la récupération de données Excel [ par Incudine ] Bonjour,Je suis entièrement néophyte au niveau VBA, mais je pense que mon problème doit être très simple pour un habitué de ce langage.Avec Excel 2003 Menu Combo selon colonne A du fichier excel [ par avyrex1926 ] Bonjour,Je voudrais savoir s'il est possible de donner une valeur au Combo1 VB6 selon un fichier Excel existant dans la colonne A?Si oui, comment fair Groupement de lignes sous Excel 2007 par VBS [ par pastagas ] Bonjour,J'ai un script à créer, en VBS, qui a pour but de remonter des informations de fichiers qui sont sur des postes sur le reseau, dans un fichier Ouvrir/fermer à partir d'un fichier excel un autre fichier excel qui se trouve dans une autre classeur [ par dpx1 ] Bonjour  J'ai un dossier de statitique qui contient une foule  de sous dossiers qui contienent des fichiers Excel (260 environs)Il y a 4 fichiers qui


Nos sponsors


Appels d'offres

Sondage...

Comparez les prix

CalendriCode

Mars 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,700 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales