DataTable automatiquement exportées vers Microsoft Excel

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:

Importar referencia a Excel

Référence à l'importation dans Excel

Importar referencia 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:

Formulario aplicación para exportar dataset a excel

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.

27 Responses to "DataTable automatiquement exportées vers Microsoft Excel»

  1. 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 ... ..

    • Carlos Linares a dit:

      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!

  2. Denko dit:

    Je vais sauver ...
    à un moment donné, il sera utile ...

  3. Victor dit:

    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

  4. Jean dit:

    Code source énorme. m'a bien servi. q il était attendu depuis longtemps.

  5. Jean dit:

    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

  6. José dit:

    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?

    • Carlos Linares a dit:

      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

  7. Beto a déclaré:

    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?

    • Elisée dit:

      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.

  8. Jason a dit:

    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

  9. Rodrigo dit:

    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.

  10. Carlos Linares a dit:

    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!

  11. Alexander affirme:

    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

  12. JuanPeople dit:

    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 !!!:..

  13. TECKNOCK dit:

    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

    • Elisée dit:

      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

  14. raysip dit:

    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

  15. Aderson dit:

    Regardez, je fais une TERRE pour My SQL

    Je vais n'aiment pas faire, mais l'AJA estubo

  16. Paul dit:

    J'ai besoin d'aide essayer de faire toutes les formes qui sont ici et j'obtiens une erreur tous les

  17. Jean dit:

    Main, vous êtes le maximum parfaite func.

  18. Neji dit:

    très bonne, les félicitations sont de la meilleure après que j'ai lu et consulté

  19. Patricia dit:

    Merci! Il a été très utile

  20. f.delgado dit:

    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

Commentaire