Exporter Datatable vers Excel
Bonjour,
Existe-t-il un moyen d'exporter rapidement le contenu d'un Datatable (créé par moi et qui contient plusieurs milliers de cellules) dans un fichier Excel ?
Tout ce que je trouve sur le Web c'est des méthodes avec des requêtes (c'est bon pour Access mais pas pour un Datatable) ou des boucles pour écrire cellule par cellule (c'est lent, très lent, trop lent).
Merci d'avance pour vos idées.
Datatable vers Excel via Presse-papier
Bonjour à tous ceux qui suivent encore cette discussion.
J'avais également besoin d'une solution rapide pour transférer un Datatable vers Excel. La solution de la double boucle
avec écriture dans chaque cellule de la feuille Excel est très lente quand on a beaucoup de données. J'ai cherché un peu
du côté ASP.NET avec transformation XSL, mais ça m'a pris trop de temps et j'ai abandonné.
La solution que j'ai trouvé utilise le presse-papier, mais via le biais d'une RichTextBox. En effet, je transforme la
Datatable en lignes de texte dans la RichTextBox, puis je fait un copier coller de ce texte vers un tableau Excel.
C'est très rapide.
La création des lignes de texte utilise la fonction String.Join, qui effectue une boucle implicite sur tous les éléments
d'un array, et des expressions lambda dans la fonction Select, pour produire le texte pour chaque élément.
On obtient un code très compact.
J'ai découvert cette façon de faire grâce à jwavila dans sa publication sur WordPress :
http://http://vb2010.wordpress.com/2...atable-to-csv/
Dans les lignes de texte, j’utilise des tabulations pour séparer les données et je remplace la virgule décimale par
un point, sinon ça pose des problèmes à Excel.
Voici le code :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| Dim datable1 as new System.Data.DataTable
Dim RichTextBox1 as new System.Windows.Forms.RichTextBox ' déclaration explicite pour être complet. '
'Elle peut être implicite en créant une RichTextBox dans un formulaire'
Dim out as String
Dim excelapp As New Excel.Application
Dim wb As Excel.Workbook
Dim ws As Excel.Worksheet
out = String.Join(vbTab, datatable1.Columns.Cast(Of DataColumn)().Select(Function(d) d.ColumnName).ToArray())
RichTextBox1.AppendText(out + vbNewLine)
For Each rw As DataRow In datatable1.Rows
out = String.Join(vbTab, rw.ItemArray.Select(Function(s) s.ToString).ToArray)
out = out.Replace(",", ".")
RichTextBox1.AppendText(out + vbNewLine)
Next
wb = excelapp.Workbooks.Add
ws = wb.Worksheets.Add()
RichTextBox1.SelectAll()
RichTextBox1.Cut() 'plus besoin du texte après, donc couper au lieu de copier'
ws.Range("A1").Select()
ws.Paste() |
Exportation rapide D'une dataTable vers un fichier Excel
Bonjour,
J'avais exactement le souci que @Xeron et en voyons les réponses proposées d'exporter la dataTable vers un fichier excel ou une presse papier pour ensuite l'exporter de là vers Excel, je l'ai trouvé tiré par les oreilles.
J'ai donc fouiné encore plus et j'ai fini par trouver une solution qui m'a beaucoup aidé et qui a bien optimisé le temps voir la réponse 7 du lien suivant:
https://stackoverflow.com/questions/...table-to-excel
Bon courage