Aujourd'hui, je veux montrer un exemple qui m'a servi pendant longtemps et je suis toujours à l'aide.
Nous allons faire un exemple pour exporter vers Excel un DataTable complète quel que soit le nombre de colonnes ou les lignes que vous avez.
Il peut y avoir plusieurs façons de le faire, mais je trouve ça vraiment utile, car cette méthode fonctionne pour n'importe quelle version d'Excel. Pour des raisons de Compatil avec les nouvelles versions d'Excel seulement gérer 256 colonnes.
La première chose que nous avons besoin est d'ajouter une référence à Microsoft.Office.Interop.Excel et procédez comme suit:

Référence à l'importation dans Excel

Importer Excel de référence
Ensuite, nous avons besoin d'un formulaire, un bouton, une DataGridView et une barre de progression. Nous pouvons avoir comme vu dans l'image:

Formulaire de demande d'exporter données pour exceller
Maintenant, je veux montrer tout le code est vraiment simple chose la plus importante est qu'il s'adapte à n'importe quelle table. Je vais pouvoir être réutilisés sans problèmes.
Importations Imports System.Data Imports System.Data.SqlClient Public Class Form1 Private ds As DataSet Microsoft.Office.Interop New Private Sub Form1_Load (ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load '/ / / /////////////////////////////////////////////// '/ / Nous créons le lien et remplissez le'////////////////////////////////////////// DataGridView Dim cnn As New SqlConnection //////// ("Data Source = localhost \ SQLEXPRESS; Initial Catalog = Northwind; Integrated Security = true") da As SqlDataAdapter Nouveau ("Select * from clients", CNN) donne. Fill (ds) DataGridView1.DataSource ds.Tables = (0) End Sub Private Sub btnExportar_Click (ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnExportar.Click'/////////// ////////////////// '/ / Créer l'objet Excel'//////////////////////// Dim Dim Dim objLibroExcel ///// objHojaExcel m_Excel m_Excel = CreateObject ("Excel.Application") m_Excel.Workbooks.Add objLibroExcel = () = objLibroExcel.Worksheets objHojaExcel (1) objHojaExcel.Name = "clients" objHojaExcel.Visible = Excel . XlSheetVisibility.xlSheetVisible objHojaExcel.Activate ()'//////////////////////////////////////// ///////////////// '/ / définir deux variables à commande ligne et colonne'///////////////////// //////////////////////////////////// rangée As Integer = 1 colonne As Integer = 1 '/ //////////////////////////////////////////////// '/ / Nous avons fixé la ligne avec les titres des colonnes du'//////////////////////////////////////// ///////// objHojaExcel.Range ("A1"). Select () pour chaque DC En ds.Tables (0). Colonnes objHojaExcel.Range (ColumnName (colonne) & 1). Value = dc.ColumnName colonne + = 1 rangée suivante + = 1'//////////////////////////////////////// ///// '/ / Nous le format des titres consécutive'//////////////////////////////// Comme Excel.Range Dim objRango ///////////// = objHojaExcel.Range ("A1". & ColumnName (ds.Tables (0) Columns.Count) & "1") objRango.Font . Bold = True = 35 objRango.Cells.Interior.ColorIndex objRango.Cells.Borders (Excel.XlBordersIndex.xlDiagonalDown). LineStyle = Excel.XlLineStyle.xlLineStyleNone objRango.Cells.Borders (Excel.XlBordersIndex.xlDiagonalUp). LineStyle = Excel. XlLineStyle.xlLineStyleNone objRango.Cells.Borders (Excel.XlBordersIndex.xlEdgeLeft). LineStyle = objRango.Cells.Borders Excel.XlLineStyle.xlLineStyleNone (Excel.XlBordersIndex.xlEdgeRight). LineStyle = objRango.Cells.Borders Excel.XlLineStyle.xlContinuous (Excel . XlBordersIndex.xlEdgeTop). LineStyle = objRango.Cells.Borders Excel.XlLineStyle.xlContinuous (Excel.XlBordersIndex.xlEdgeBottom). LineStyle ='//////////////// Excel.XlLineStyle.xlContinuous ////////////////////////// '/ / Charger toutes les lignes dans le DataTable'////////////// //////////////////////////// ProgressBar1.Maximum = ds.Tables (0). Rows.Count colonne ProgressBar1.Value = 1 = 0 Pour chaque DR Dans ds.Tables (0). colonne rows = 1 pour chaque DC En ds.Tables (0). Colonnes objHojaExcel.Range (ColumnName (colonne) & ligne). Value = dr (dc.ColumnName) + colonne = 1 rangée suivante + = 1 + 1 = Suivant'//////////////////////////////////// ProgressBar1.Value / / '/ / Définit la largeur automatiquement' / / pour toutes les colonnes utilisées'//////////////////////////////// ////// objHojaExcel.Range objRango = ("A1:".. & ColumnName (ds.Tables (0) Columns.Count) & ds.Tables (0) Rows.Count.ToString) objRango.Select () objRango . Columns.AutoFit ()'///////////////////////////////////// '/ / tell '///////////////////////////////////// affichage Excel MsgBox ("Exporter vers Excel complète" , MsgBoxStyle.Information ».:: solovb.net ::.") m_Excel.Visible = True End Sub ColumnName Fonction Publique (nombre ByVal As Integer) As String Dim colonne (256) Comme colonne de type chaîne (1) =" A " Colonne (2) = "B" colonne (3) = "C" colonne (4) = "D" colonne (5) = "E" colonne (6) = "F" colonne (7) = "G" colonne ( 8) = "H" colonne (9) = "I" colonne (10) = "J" colonne (11) = "K" colonne (12) = "L" colonne (13) = "M" colonne (14) = colonne «N» (15) = "O" colonne (16) = "P" colonne (17) = "Q" colonne (18) = "R" colonne (19) = "S" colonne (20) = " T "colonne (21) =" U "colonne (22) =" V "colonne (23) =" W "colonne (24) =" X "colonne (25) =" Y "colonne (26) =" Z " colonne (27) = "AA" colonne (28) = "AB" colonne (29) = "AC" colonne (30) = "AD" colonne (31) = "AE" colonne (32) = "AF" colonne ( 33) = "AG" Colonne (34) = "AH" colonne (35) = "AI" colonne (36) = "AJ" colonne (37) = "AK" colonne (38) = colonne «À» (39) = "AM" colonne (40) = "Une" colonne (41) = "AO" colonne (42) = "AP" colonne (43) = "AQ" colonne (44) = "AR" colonne (45) = " AS "colonne (46) =" A "colonne (47) =" UA "colonne (48) =" AV "colonne (49) =" AW "colonne (50) =" AX "colonne (51) =" AY " colonne (52) = "AZ" colonne (53) = "BA" colonne (54) = "BB" colonne (55) = "BC" colonne (56) = "BD" colonne (57) = "BE" colonne ( 58) = "BF" colonne (59) = "BG" colonne (60) = "BH" colonne (61) = "BI" colonne (62) = "BJ" colonne (63) = "BK" colonne (64) = "BL" colonne (65) = "BM" colonne (66) = "BN" colonne (67) = "BO" colonne (68) = "BP" colonne (69) = "BQ" colonne (70) = " BR "colonne (71) =" BS "colonne (72) =" BT "colonne (73) =" BU "colonne (74) =" BV "colonne (75) =" BW "colonne (76) =" BX " colonne (77) = "par" colonne (78) = "BZ" colonne (79) = "CA" colonne (80) = "CB" colonne (81) = "CC" colonne (82) = "CD" colonne ( 83) = "CE" de colonne (84) = "FC" colonne (85) = "CG" colonne (86) = "CH" colonne (87) = "CI" colonne (88) = "CJ" colonne (89) = "CK" colonne (90) = "CL" colonne (91) = "CM" colonne (92) = "CN" colonne (93) = "CO" colonne (94) = "CP" colonne (95) = " CQ "colonne (96) =" CR "colonne (97) =" CS "colonne (98) =" CT "colonne (99) =" CU "colonne (100) =" CV "colonne (101) =" CW " colonne (102) = "CX" colonne (103) = "CY" colonne (104) = "CZ" colonne (105) = "DA" colonne (106) = "DB" colonne (107) = "DC" colonne ( 108) = "JJ" colonne (109) = "DE" colonne (110) = "DF" colonne (111) = "DG" colonne (112) = "DH" colonne (113) = "ID" colonne (114) = "DJ" colonne (115) = "DK" colonne (116) = "DL" colonne (117) = "DM" colonne (118) = "DN" colonne (119) = "NE" colonne (120) = " DP "colonne (121) =" DQ "colonne (122) =" DR "colonne (123) =" DS "colonne (124) =" DT "colonne (125) =" UA "colonne (126) =" DV " colonne (127) = "DW" colonne (128) = "DX" colonne (129) = "DY" colonne (130) = "DZ" colonne (131) = "EA" colonne (132) = "EB" colonne ( 133) = "CE" colonne (134) = "ED" colonne (135) = "EE" colonne (136) = "EF" colonne (137) = "EG" colonne (138) = "EH" colonne (139) = "AE" colonne (140) = "EJ" colonne (141) = "EK" colonne (142) = "EL" colonne (143) = "MS" colonne (144) = "EN" colonne (145) = " EO "colonne (146) =" EP "colonne (147) =" EQ "colonne (148) =" ER "colonne (149) =" ES "colonne (150) =" HE "colonne (151) =« UE » colonne (152) = "EV" colonne (153) = "EW" colonne (154) = "EX" colonne (155) = "EY" colonne (156) = "EZ" colonne (157) = "FA" colonne ( 158) = "FB" colonne (159) = "FC" colonne (160) = "FD" colonne (161) = "FE" colonne (162) = "FF" colonne (163) = "FG" colonne (164) = "FH" colonne (165) = "IF" colonne (166) = "FJ" colonne (167) = "FK" colonne (168) = "FL" colonne (169) = "FM" colonne (170) = " FN "colonne (171) =" pour "colonne (172) =" PF "colonne (173) =" FC "colonne (174) =" FR "colonne (175) =" FS "colonne (176) =" FT " colonne (177) = "FU" colonne (178) = "FV" colonne (179) = "FW" colonne (180) = "FX" colonne (181) = "FY" colonne (182) = "FZ" colonne ( 183) = "GA" colonne (184) = "GB" colonne (185) = "GC" colonne (186) = "GD" colonne (187) = "GE" colonne (188) = "GF" colonne (189) = "GG" colonne (190) = "GH" colonne (191) = "GI" colonne (192) = "GJ" colonne (193) = "GK" colonne (194) = "GL" colonne (195) = " GM "colonne (196) =" GN "colonne (197) =" GO "colonne (198) =" GP "colonne (199) =" GQ "colonne (200) =" GR "colonne (201) =" GS " colonne (202) = "GT" colonne (203) = "GU" colonne (204) = "GV" colonne (205) = "GW" colonne (206) = "GX" colonne (207) = "GY" colonne ( 208) = "GZ" colonne (209) = "HA" colonne (210) = "HB" colonne (211) = "HC" colonne (212) = "HD" colonne (213) = "HE" colonne (214) = "HF" colonne (215) = "HG" colonne (216) = "HH" colonne (217) = "HI" colonne (218) = "HJ" colonne (219) = "HK" colonne (220) = " HL "colonne (221) =" HM "colonne (222) =" HN "colonne (223) =" HO "colonne (224) =" HP "colonne (225) =" HQ "colonne (226) =" RH " colonne (227) = "HS" colonne (228) = "HT" colonne (229) = "HU" colonne (230) = "HV" colonne (231) = "HW" colonne (232) = "H" colonne ( 233) = "HY" colonne (234) = "HZ" colonne (235) = "IA" colonne (236) = "IB" colonne (237) = "IC" colonne (238) = "ID" colonne (239) = "IE" colonne (240) = "SI" colonne (241) = "IG" colonne (242) = "IH" colonne (243) = "II" colonne (244) = "IJ" colonne (245) = " IK "colonne (246) =" IL "colonne (247) =" IM "colonne (248) =" EN "colonne (249) =" IO "colonne (250) =" IP "colonne (251) =" IQ " colonne (252) = "IR" colonne (253) = "est" la colonne (254) = "IT" colonne (255) = "UI" colonne (256) Class = colonne "IV" de retour (nombre) End Function End Cette méthode m'a bien servi et j'espère que vous aussi ... s'il vous plaît laissez vos commentaires.
Informations Bitacoras.com ...
Tarif en Bitacoras.com: Bonjour: Aujourd'hui je veux montrer un exemple qui m'a servi pendant longtemps et je suis toujours à l'aide. Nous allons faire un exemple pour exporter vers Excel un DataTable complète quel que soit le nombre de colonnes ou des lignes qui ont ... ..
Bonne ...
Excellent post! Merci vous m'avez aidé à plein, mais j'ai une grande question .. Depuis cette connexion est avec SQL .. Comment puis-je changer le nom des colonnes? Parce qu'il apporte le nom des champs en SQL ..!
Espérons que j'ai compris ..
Merci!
Je vais sauver ...
à un moment donné, il sera utile ...
Est-il bon pour Excel 2007? J'ai eu des problèmes avec les exportations à se développer, qu'il est valable pour les versions antérieures, mais pas pour 2007. Merci
Code source énorme. m'a bien servi. q il était attendu depuis longtemps.
Mais aussi l'importation d'un tableau de données ecxel. Ambien, mais pourrait être un datagrid et ensuite mettre à jour le DataAdapter et accepter les changements, nous serions d'économie datatable dans q bd ... J'espère que je peux aider ou être capable de trouver .. Merci
Un grand merci Bonjour! ce grand!
Mais je me demande qui précise que utilisés dans la grille de l'événement qui sont de plusieurs Datagrid?
De la table que vous appelez ...
SELECT * FROM (nom de la table)
Si vous voulez spécifier quels champs vous voulez
select (champs, des champs, des champs) * from table
EJM
couleur de la voiture de sélectionner, d'anions par les véhicules
J'ai un problème avec cet exemple que je fais deux erreurs dans les variables CC et DR, je peux faire pour résoudre ce problème?
Salut, essayez ceci:
Pour chaque DR Comme DataRow dans ds.Tables (0). Rows et DataColumn pour chaque DC En tant que ds.Tables (0). Colonnes
J'espère que cela soit résolu. Salutations.
Bonjour.
Cette chevere, mais une partie du nom de colonne n'est pas très fonctionnel.
Je vais télécharger sur mon blog un limitations beaucoup plus petite taille du code et sans
jaysson.blogspot.com
prêts et monta l'article
http://jaysson.blogspot.com/2010/06/columnas-es-excel.html
Bon article, mais j'ai un problème sur mon ordinateur avec Excel 2007 fonctionne très bien, mais les ordinateurs avec Excel 2003 ou plus tôt ne fonctionnera pas. Quelqu'un sait si le problème des bibliothèques qui sont importés, que vous donnez à comprendre qui fonctionne pour toute exceller, mais j'ai rencontré ce problème.
Voyons voir si quelqu'un peut résoudre le doute.
Je vous remercie.
Bonne ...
Excellent post! Merci vous m'avez aidé à plein, mais j'ai une grande question .. Depuis cette connexion est avec SQL .. Comment puis-je changer le nom des colonnes? Parce qu'il apporte le nom des champs en SQL ..!
Espérons que j'ai compris ..
Merci!
Public Sub ExportarDatosExcel (ByVal DataGridView1 Comme DataGridView, titre ByVal As String)
As New Excel.Application Dim m_Excel
m_Excel.Cursor = Excel.XlMousePointer.xlWait
m_Excel.Visible = True
Comme Excel.Workbook Dim. = objLibroExcel m_Excel.Workbooks.Add
Comme Excel.Worksheet Dim. = objHojaExcel objLibroExcel.Worksheets (1)
Avec objHojaExcel
. Visible = Excel.XlSheetVisibility.xlSheetVisible
. Activer ()
"En-tête
. Range ("A1: L1"). Merge ()
. Range ("A1: L1"). Value = "INSTITUT ARGENCAF"
. Range ("A1: L1"). Font.Bold = True
. Range ("A1: L1"). Font.Size = 15
«Tuft
. Range ("A2: L2"). Merge ()
. Range ("A2: L2"). Value title =
. Range ("A2: L2"). Font.Bold = True
. Range ("A2: L2"). Font.Size = 12
Const primeraLetra Comme Char = "A"
Comme firstNumber Const court = 3
Lettre As Char, Char Comme UltimaLetra
Nombre As Integer, UltimoNumero As Integer
As Byte = cod_letra Asc (primeraLetra) - 1
Dim As String = Application.CurrentCulture.NumberFormat.NumberDecimalSeparator sepDec
Dim As String = Application.CurrentCulture.NumberFormat.NumberGroupSeparator sepMil
"Régler le format de la colonne de la fille de calcul
StrColumna As String = ""
LetraIzq As String = ""
As Byte = cod_LetraIzq Asc (primeraLetra) - 1
Lettre = primeraLetra
= Nombre firstNumber
Comme Excel.Range Dim objCelda
Comme pour chaque C DataGridViewColumn En DataGridView1.Columns
Alors si c.Visible
Si Lettre = "Z" Puis
Lettre = primeraLetra
cod_letra = Asc (primeraLetra)
cod_LetraIzq + = 1
LetraIzq = Chr (cod_LetraIzq)
D'autre
cod_letra + = 1
Lettre = Chr (cod_letra)
End If
strColumna = LetraIzq + Lyrics + Numero.ToString
objCelda =. Range (strColumna, Type.Missing)
objCelda.Value = c.HeaderText
objCelda.EntireColumn.Font.Size = 8
«ObjCelda.EntireColumn.NumberFormat = c.DefaultCellStyle.Format
Si c.ValueType Est GetType (Decimal) OrElse c.ValueType Est GetType (double) alors
objCelda.EntireColumn.NumberFormat = "#" + + sepMil "0" + + sepDec "00"
End If
End If
Suivant
Comme Excel.Range Dim objRangoEncab Range =. (primeraLetra + Numero.ToString, LetraIzq + Paroles Numero.ToString +)
objRangoEncab.BorderAround (1, Excel.XlBorderWeight.xlMedium)
UltimaLetra = Envoyer
Dim As String = UltimaLetraIzq LetraIzq
LOAD DATA '
Dim i As Integer = Nombre + 1
Pour chaque liste dans Comme DataGridView1.Rows DataGridViewRow
LetraIzq = ""
cod_LetraIzq = Asc (primeraLetra) - 1
Lettre = primeraLetra
cod_letra = Asc (primeraLetra) - 1
Comme pour chaque C DataGridViewColumn En DataGridView1.Columns
Alors si c.Visible
Si Lettre = "Z" Puis
Lettre = primeraLetra
cod_letra = Asc (primeraLetra)
cod_LetraIzq + = 1
LetraIzq = Chr (cod_LetraIzq)
D'autre
cod_letra + = 1
Lettre = Chr (cod_letra)
End If
strColumna = LetraIzq + Paroles
«Charge ici devrait être
. Cells (i, strColumna) = IIf (IsDBNull (reg.ToString), "", reg.Cells (c.Index). Value)
». Cells (i, strColumna) = IIf (IsDBNull (Reg. (c.DataPropertyName)), c.DefaultCellStyle.NullValue, reg (c.DataPropertyName))
». Range (strColumna + i, strColumna + i). En ()
End If
Suivant
Comme Excel.Range Dim objRangoReg Range =. (primeraLetra + i.ToString, i.ToString strColumna +)
objRangoReg.Rows.BorderAround ()
objRangoReg.Select ()
i + = 1
Suivant
UltimoNumero = i
«Tracer les lignes des colonnes
LetraIzq = ""
cod_LetraIzq = Asc ("A")
cod_letra = Asc (primeraLetra)
Lettre = primeraLetra
Comme pour chaque C DataGridViewColumn En DataGridView1.Columns
Alors si c.Visible
objCelda =. Range (+ Paroles + primerNumero.ToString LetraIzq, LetraIzq + Paroles + (UltimoNumero - 1.) ToString)
objCelda.BorderAround ()
Si Lettre = "Z" Puis
Lettre = primeraLetra
cod_letra = Asc (primeraLetra)
LetraIzq = Chr (cod_LetraIzq)
cod_LetraIzq + = 1
D'autre
cod_letra + = 1
Lettre = Chr (cod_letra)
End If
End If
Suivant
«Dessinez la frontière extérieure épaisse
Comme Excel.Range Dim objRango Range =. (primeraLetra + primerNumero.ToString, UltimaLetra UltimaLetraIzq + + (UltimoNumero - 1.) ToString)
objRango.Select ()
objRango.Columns.AutoFit ()
objRango.Columns.BorderAround (1, Excel.XlBorderWeight.xlMedium)
End With
m_Excel.Cursor = Excel.XlMousePointer.xlDefault
End Sub
ToolStripButton2_Click_1 Private Sub (ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ToolStripButton2.Click
ExportarDatosExcel (DataGridView1, «exportation»)
End Sub
EXCELLENT! .... merci frère, j'ai eu 3 jours avec un module d'import / export Excel et rien n'a fonctionné .... mais avec votre solution que je vois à nouveau les étoiles ... Salutations de Arequipa !!!:..
Vous êtes les bienvenus. Je suis content que vous avez servi comme exemple.
Ce code m'a beaucoup aidé, donc je travaille avec mes deux cents:
J'ai optimisé le "ColumnName" pour obtenir la colonne ahsta ZZ (702 cols).
Ici je vous donne le code:
ColumnName Fonction Publique (nombre ByVal As Integer) As String
Colonne de Dim (703) As String
Colonne (1) = "A"
Colonne (2) = "B"
colonne (3) = "C"
Colonne (4) = "D"
Colonne (5) = "E"
colonne (6) = "F"
Colonne (7) = "G"
Colonne (8) = "H"
colonne (9) = "I"
Colonne (10) = "J"
Colonne (11) = "K"
Colonne (12) = "L"
Colonne (13) = "M"
colonne (14) = "N"
Colonne (15) = "O"
colonne (16) = "P"
colonne (17) = "Q"
Colonne (18) = "R"
colonne (19) = "S"
Colonne (20) = "T"
colonne (21) = "U"
colonne (22) = "V"
colonne (23) = "W"
colonne (24) = "X"
colonne (25) = "Y"
colonne (26) = "Z"
Dim i = 27
Pour LTR1 = 1 à 26
Pour LTR2 = 1 à 26
colonne (i) = colonne (LTR1) et la colonne (LTR2)
i + = 1
Suivant
Suivant
Colonne de retour (nombre)
End Function
TECKNOCK, merci beaucoup pour aider!, Mais gardez à l'esprit que si le livre, je crois est compatible avec Excel 97-2003 colonnes maximum autorisé est de 256 (à IV). Tout comme un commentaire afin de prendre cela en compte.
Elisha
Lorsque vous exécutez l'application localement funcioana correctement, mais lorsque je vais sur un site Web ne génère pas l'Excel mais ne reçoivent pas d'erreur
Regardez, je fais une TERRE pour My SQL
Je vais n'aiment pas faire, mais l'AJA estubo
J'ai besoin d'aide essayer de faire toutes les formes qui sont ici et j'obtiens une erreur tous les
Main, vous êtes le maximum parfaite func.
[...] [...]
très bonne, les félicitations sont de la meilleure après que j'ai lu et consulté
Merci! Il a été très utile
J'entends le code fonctionne je fais une erreur dans da.Fill (DS)
Je marque le bug n'a pas été trouvé SqlException
pouvez vous m'aider