Bonjour à tous
Je voudrais exporter le contenu d'un DataGridView vers Excel. Le control DataGridView pouvant être lié à un DataSource ou non.
Merci d'avance de toute aide
Bonjour à tous
Je voudrais exporter le contenu d'un DataGridView vers Excel. Le control DataGridView pouvant être lié à un DataSource ou non.
Merci d'avance de toute aide
Bah là tout de suite ? euh non
Sans plaisanter, tu vas devoir le faire à la mano => aucun mécanisme natif (à ma connaissance) n'existe.
Techno Win à priori (vu le controle), lorsque je dois exporter sous excel, j'utilise les rdlc.
Donc, je me crée un report rdlc, et j'utilise les composants de reporting sans les afficher, et en les pilotant (je push les data dedans, et j'ordonne la création de l'xls) et je retourne le fichier xls.
AUtre soluce ... csv.
Sur Google : "C# Excel automation tutorial"
ou bien, vu sur le web :
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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85 using System; using System.Windows.Forms; using System.Data; using System.Data.SqlClient; using Excel = Microsoft.Office.Interop.Excel; namespace WindowsApplication1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { SqlConnection cnn ; string connectionString = null; string sql = null; connectionString = "data source=servername;initial catalog=databasename;user id=username;password=password;"; cnn = new SqlConnection(connectionString); cnn.Open(); sql = "SELECT * FROM Product"; SqlDataAdapter dscmd = new SqlDataAdapter(sql, cnn); DataSet ds = new DataSet(); dscmd.Fill(ds); dataGridView1.DataSource = ds.Tables[0]; } private void button2_Click(object sender, EventArgs e) { Excel.Application xlApp ; Excel.Workbook xlWorkBook ; Excel.Worksheet xlWorkSheet ; object misValue = System.Reflection.Missing.Value; xlApp = new Excel.ApplicationClass(); xlWorkBook = xlApp.Workbooks.Add(misValue); xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1); int i = 0; int j = 0; for (i = 0; i <= dataGridView1.RowCount - 1; i++) { for (j = 0; j <= dataGridView1.ColumnCount - 1; j++) { DataGridViewCell cell = dataGridView1[j, i]; xlWorkSheet.Cells[i + 1, j + 1] = cell.Value; } } xlWorkBook.SaveAs("csharp.net-informations.xls", Excel.XlFileFormat.xlWorkbookNormal, misValue, misValue, misValue, misValue, Excel.XlSaveAsAccessMode.xlExclusive, misValue, misValue, misValue, misValue, misValue); xlWorkBook.Close(true, misValue, misValue); xlApp.Quit(); releaseObject(xlWorkSheet); releaseObject(xlWorkBook); releaseObject(xlApp); MessageBox.Show("Excel file created , you can find the file c:\\csharp.net-informations.xls"); } private void releaseObject(object obj) { try { System.Runtime.InteropServices.Marshal.ReleaseComObject(obj); obj = null; } catch (Exception ex) { obj = null; MessageBox.Show("Exception Occured while releasing object " + ex.ToString()); } finally { GC.Collect(); } } } }
Attention l'automation Office ... a beaucoup d'inconvénients ! plus que de passer par un mécanisme de reporting !
Les interrops sont ... parfois ... difficilement controlables (process qui reste en mémoire alors que tu lui a indiqué qu'il devait se terminer etc).
Et plus complexe que pour le reporting (d'expérience, j'ai déjà pratiqué les 2, et aujourd'hui je passe toujours par le reporting caché à l'utilisateur !)...
D'habitude je passe toujours par un état Crystal Report. Mais le problème ici est que le nombre de colonnes à afficher et l'ordre d'affichage sont choisis par l'utilisateur final, ce qui complique la confection des reports associés.
Pour ce qui est de passer par l'Automation, personnellement c'est lorsque je n'ai aucune autre solution.
J'avais pensé enregistrer dans un fichier .xls en séparant les colonnes par une tabulation. Je ne sais pas ce que vous en pensez ?
Bah, oui : le csv est une (bonne) solution,
simple, efficiente et maintenable,
C'est quoi le csv ?
"Comma-separated_values"
http://fr.wikipedia.org/wiki/Comma-separated_values
C'est le principe des fichier dont les valeurs sont séparées par un caractère séparateur.
A l'origine, les caractères étaient des virgules. Aujourd'hui, on peut choisir le car que l'on veut (visible ou non, exemple de char non visible : le char "beeep")
En général, les séparateur choisit sont : virgule, point-virgule, tabulation, dollar, nombre de char limité par champ, etc.
Excel peut ouvrir ces fichiers, et séparer automatiquement par cellule en fonction du séparateur que tu lui indiques.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager