Exporta Automaticament DataTable a Microsoft Excel

Avui vull mostrar-los un exemple que m'ha servit durant molt temps i encara ho segueixo utilitzant.
Farem un exemple per exportar un DataTable complet a Excel sense importar el nombre de columnes o files que aquest tingui.

Potser hi hagi moltes formes de realitzar aquesta tasca, però trobo realment útil aquest mètode ja que serveix per a qualsevol versió d'excel. Per qüestions de compatilidad amb les noves versions d'Excel només manejarem 256 columnes.

El primer que necessitem és afegir una referència a Microsoft.Office.Interop.Excel i ho fem de la següent manera:

Importar referencia a Excel

Importar referència a Excel

Importar referencia Excel

Importa referència Excel

Després necessitem un formulari, un botó, un dataGridView i una barra de progrés. El podem disposar com es veu a la imatge:

Formulario aplicación para exportar dataset a excel

Formulari aplicació per exportar dataset a excel

Ara vull mostrar tot el codi, realment és senzill el més important és que s'adapta a qualsevol taula. El podran reutilitzar sense problemes.

 Imports System.Data Imports System.Data.SqlClient Imports Microsoft.Office.Interop Public Class Form1 Private ds As New DataSet Private Sub Form1_Load (ByVal sender As System.Object, ByVal i As System.EventArgs) Handles MyBase.Load '/ / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / '/ / Creem la connexió i omplim el DataGridView '/ / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / Dim cnn As New SqlConnection ("Data Source = localhost \ sqlexpress; Initial Catalog = Northwind; Integrated Security = True") Dim dóna As New SqlDataAdapter ("Select * from customers", cnn) dóna. Fill (ds) DataGridView1.DataSource = ds.Tables (0) End Sub Private Sub btnExportar_Click (ByVal sender As System.Object, ByVal i As System.EventArgs) Handles btnExportar.Click '/ / / / / / / / / / / / / / / / / / / / / / / / / / / / / '/ / Creem l'Objecte Excel' / / / / / / / / / / / / / / / / / / / / / / / / / / / / / Dim m_Excel Dim objLibroExcel Dim objHojaExcel m_Excel = CreateObject ("Excel.Application") objLibroExcel = m_Excel.Workbooks.Add () objHojaExcel = objLibroExcel.Worksheets (1) objHojaExcel.Name = "Customers" objHojaExcel.Visible = Excel . XlSheetVisibility.xlSheetVisible objHojaExcel.Activate () '/ / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / '/ / Definim dues variables per controlar fila i columna' / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / Dim fila As Integer = 1 Dim columna As Integer = 1 '/ / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / '/ / armem la línia amb els títols de columnes '/ / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / objHojaExcel.Range ("A1"). Select () For Each dc In ds.Tables (0). Columns objHojaExcel.Range (nombreColumna (columna) & 1). Value = dc.ColumnName columna + = 1 Next fila + = 1 '/ / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / '/ / Li donem format a la fila dels títols' / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / Dim objRango As Excel.Range = objHojaExcel.Range ("A1:" & nombreColumna (ds.Tables (0). Columns.Count) & "1") objRango.Font . Bold = True objRango.Cells.Interior.ColorIndex = 35 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 = Excel.XlLineStyle.xlLineStyleNone objRango.Cells.Borders (Excel.XlBordersIndex.xlEdgeRight). LineStyle = Excel.XlLineStyle.xlContinuous objRango.Cells.Borders (Excel . XlBordersIndex.xlEdgeTop). LineStyle = Excel.XlLineStyle.xlContinuous objRango.Cells.Borders (Excel.XlBordersIndex.xlEdgeBottom). LineStyle = Excel.XlLineStyle.xlContinuous '/ / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / '/ / Carreguem totes les files del datatable' / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / ProgressBar1.Maximum = ds.Tables (0). Rows.Count columna = 1 ProgressBar1.Value = 0 For Each dr In ds.Tables (0). Rows columna = 1 For Each dc In ds.Tables (0). Columns objHojaExcel.Range (nombreColumna (columna) & fila). Value = dr (dc.ColumnName) columna + = 1 Next fila + = 1 ProgressBar1.Value + = 1 Next '/ / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / '/ / Ajustem automàticament l'ample' / / de totes les columnes utilitzada '/ / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / objRango = objHojaExcel.Range ("A1:" & nombreColumna (ds.Tables (0). Columns.Count) & ds.Tables (0). Rows.Count.ToString) objRango.Select () objRango . Columns.AutoFit () '/ / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /' / / Diem a Excel que es mostri '/ / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / Msgbox ("Exportació a Excel completa" , MsgBoxStyle.Information, ". :: solovb.net ::.") m_Excel.Visible = True End Sub Public Function nombreColumna (ByVal numero As Integer) As String Dim columna (256) As String columna (1) = "A" columna (2) = "B" columna (3) = "C" columna (4) = "D" columna (5) = "E" columna (6) = "F" columna (7) = "G" columna ( 8) = "H" columna (9) = "I" columna (10) = "J" columna (11) = "K" columna (12) = "L" columna (13) = "M" columna (14) = "N" columna (15) = "O" columna (16) = "P" columna (17) = "Q" columna (18) = "R" columna (19) = "S" columna (20) = " T "columna (21) =" O "columna (22) =" V "columna (23) =" W "columna (24) =" X "columna (25) =" I "columna (26) =" Z " columna (27) = "AA" columna (28) = "AB" columna (29) = "AC" columna (30) = "AD" columna (31) = "AE" columna (32) = "AF" columna ( 33) = "AG" columna (34) = "AH" columna (35) = "AI" columna (36) = "AJ" columna (37) = "AK" columna (38) = "AL" columna (39) = "AM" columna (40) = "AN" columna (41) = "AO" columna (42) = "AP" columna (43) = "AQ" columna (44) = "AR" columna (45) = " AS "columna (46) =" AT "columna (47) =" AU "columna (48) =" AV "columna (49) =" AW "columna (50) =" AX "columna (51) =" AJ " columna (52) = "AZ" columna (53) = "BA" columna (54) = "BB" columna (55) = "BC" columna (56) = "BD" columna (57) = "BE" columna ( 58) = "BF" columna (59) = "BG" columna (60) = "BH" columna (61) = "BI" columna (62) = "BJ" columna (63) = "BK" columna (64) = "BL" columna (65) = "BM" columna (66) = "BN" columna (67) = "BO" columna (68) = "BP" columna (69) = "BQ" columna (70) = " BR "columna (71) =" BS "columna (72) =" BT "columna (73) =" BU "columna (74) =" BV "columna (75) =" BW "columna (76) =" BX " columna (77) = "BY" columna (78) = "BZ" columna (79) = "CA" columna (80) = "CB" columna (81) = "CC" columna (82) = "CD" columna ( 83) = "CE" columna (84) = "CF" columna (85) = "CG" columna (86) = "CH" columna (87) = "CI" columna (88) = "CJ" columna (89) = "CK" columna (90) = "CL" columna (91) = "CM" columna (92) = "CN" columna (93) = "CO" columna (94) = "CP" columna (95) = " CQ "columna (96) =" CR "columna (97) =" CS "columna (98) =" CT "columna (99) =" CU "columna (100) =" CV "columna (101) =" CW " columna (102) = "CX" columna (103) = "CY" columna (104) = "CZ" columna (105) = "DA" columna (106) = "DB" columna (107) = "DC" columna ( 108) = "DD" columna (109) = "DE" columna (110) = "DF" columna (111) = "DG" columna (112) = "DH" columna (113) = "DI" columna (114) = "DJ" columna (115) = "DK" columna (116) = "DL" columna (117) = "DM" columna (118) = "DN" columna (119) = "DO" columna (120) = " DP "columna (121) =" DQ "columna (122) =" DR "columna (123) =" DS "columna (124) =" DT "columna (125) =" DU "columna (126) =" DV " columna (127) = "DW" columna (128) = "DX" columna (129) = "DI" columna (130) = "DZ" columna (131) = "EA" columna (132) = "EB" columna ( 133) = "EC" columna (134) = "ED" columna (135) = "EE" columna (136) = "EF" columna (137) = "EG" columna (138) = "EH" columna (139) = "EI" columna (140) = "EX" columna (141) = "EK" columna (142) = "EL" columna (143) = "EM" columna (144) = "A" columna (145) = " EO "columna (146) =" EP "columna (147) =" EQ "columna (148) =" ER "columna (149) =" ES "columna (150) =" ET "columna (151) =" EU " columna (152) = "EV" columna (153) = "EW" columna (154) = "EX" columna (155) = "EI" columna (156) = "EZ" columna (157) = "FA" columna ( 158) = "FB" columna (159) = "FC" columna (160) = "FD" columna (161) = "FE" columna (162) = "FF" columna (163) = "FG" columna (164) = "FH" columna (165) = "FI" columna (166) = "FJ" columna (167) = "FK" columna (168) = "FL" columna (169) = "FM" columna (170) = " FN "columna (171) =" FO "columna (172) =" FP "columna (173) =" FQ "columna (174) =" FR "columna (175) =" FS "columna (176) =" FT " columna (177) = "FU" columna (178) = "FV" columna (179) = "FW" columna (180) = "FX" columna (181) = "FY" columna (182) = "FZ" columna ( 183) = "GA" columna (184) = "GB" columna (185) = "GC" columna (186) = "GD" columna (187) = "GE" columna (188) = "GF" columna (189) = "GG" columna (190) = "GH" columna (191) = "GI" columna (192) = "GJ" columna (193) = "GK" columna (194) = "GL" columna (195) = " GM "columna (196) =" GN "columna (197) =" GO "columna (198) =" GP "columna (199) =" GQ "columna (200) =" GR "columna (201) =" GS " columna (202) = "GT" columna (203) = "GU" columna (204) = "GV" columna (205) = "GW" columna (206) = "GX" columna (207) = "GY" columna ( 208) = "GZ" columna (209) = "HA" columna (210) = "HB" columna (211) = "HC" columna (212) = "HD" columna (213) = "HE" columna (214) = "HF" columna (215) = "HG" columna (216) = "HH" columna (217) = "HI" columna (218) = "HJ" columna (219) = "HK" columna (220) = " HL "columna (221) =" HM "columna (222) =" HN "columna (223) =" HO "columna (224) =" HP "columna (225) =" HQ "columna (226) =" HR " columna (227) = "HS" columna (228) = "HT" columna (229) = "HU" columna (230) = "HV" columna (231) = "HW" columna (232) = "HX" columna ( 233) = "H" columna (234) = "HZ" columna (235) = "IA" columna (236) = "IB" columna (237) = "IC" columna (238) = "Identitat" columna (239) = "IE" columna (240) = "IF" columna (241) = "IG" columna (242) = "IH" columna (243) = "II" columna (244) = "IJ" columna (245) = " IK "columna (246) =" IL "columna (247) =" IM "columna (248) =" IN "columna (249) =" IO "columna (250) =" IP "columna (251) =" IQ " columna (252) = "IR" columna (253) = "IS" columna (254) = "IT" columna (255) = "IU" columna (256) = "IV" Return columna (nombre) End Function End Class 

Aquest mètode m'ha servit molt i espero que a vostès també ... si us plau deixin els seus comentaris.

34 Responses to "Exporta Automaticament DataTable a Microsoft Excel"

  1. Informació Bitacoras.com ...

    Valora en Bitacoras.com: Hola, Avui vull mostrar-los un exemple que m'ha servit durant molt temps i encara ho segueixo utilitzant. Farem un exemple per exportar un DataTable complet a Excel sense importar el nombre de columnes o files que aquest Teng .....

    • Carlos Linares diu:

      Bones ...

      Excel · lent post!! Em va ajudar full Moltes Gràcies, però tinc una gran dubte .. Com aquesta connexió aquesta amb sql .. Com faig per canviar-li el nom a les columnes!? Perquè em porta el nom dels camps de sql ..!!

      Tant de bo i m'hagin entès ..

      Gràcies!

  2. Denko diu:

    m'ho vaig a guardar ...
    en algun moment serà útil ...

  3. Victor diu:

    És vàlid per Excel 2007? Jo he tingut problemes amb una exportació que desenvolupem, que sí que és vàlida per a versions anteriors, però no per a 2007. Gràcies

  4. Joan diu:

    Tremendo codi font. em va servir de molt. era el q necessitava des de fa temps.

  5. Joan diu:

    Encara que també necessito la importació d'ecxel a un data table. encara ambiental podria ser a un DataGrid i després actualitzant el dataadapter i acceptant els canvis en datatable es estaria guardant en la bd ... espero q em puguin ajudar o poder trobar .. gràcies

  6. jose diu:

    Hola Moltes gràcies!! aquesta excel · lent!
    Però em pregunto on s'especifica que DataGrid usés EN el cas que estiguin diversos DataGrid?

    • Carlos Linares diu:

      Per la taula que estiguis trucant ...

      select * from (Nom de la Taula)

      Si vols especificar quins camps vols

      select (camps, camps, camps) * from taula
      ejm
      select carro, color, anions from vehicles

  7. beto diu:

    Tinc un problema amb aquest exemple em marca 2 errors en les variables dc i dr, que puc fer per solucionar-ho??

    • Eliseu diu:

      Hola, prova això:
      For Each dr es datarow In ds.Tables (0). Rows i For Each dc es datacolumn In ds.Tables (0). Columns

      espero que amb això se solucioni. Salutacions.

  8. jason diu:

    hola.
    aquesta chevere, però la part dels nom de columna no és molt funcional.
    vaig a pujar al meu bloc un codi molt més petit i sense limitacions de mida

    jaysson.blogspot.com

  9. Rodrigo diu:

    Bon article, però jo tinc un problema, al meu ordinador amb el excel 2007 funciona sense problemes, però amb ordinadors amb excel 2003 o anteriors no funciona. Algú sap si és problema de les llibreries que s'importen, ja que dones a entendre que funciona per a qualsevol excel, però jo m'he trobat amb aquest problema.

    A veure si algú em pot resoldre el dubte.
    Gràcies.

  10. Carlos Linares diu:

    Bones ...

    Excel · lent post!! Em va ajudar full Moltes Gràcies, però tinc una gran dubte .. Com aquesta connexió aquesta amb sql .. Com faig per canviar-li el nom a les columnes!? Perquè em porta el nom dels camps de sql ..!!

    Tant de bo i m'hagin entès ..

    Gràcies!

  11. Alexander diu:

    Public Sub ExportarDatosExcel (ByVal DataGridView1 As DataGridView, ByVal títol As String)
    Dim m_Excel As New Excel.Application
    m_Excel.Cursor = Excel.XlMousePointer.xlWait
    m_Excel.Visible = True
    Dim objLibroExcel As Excel.Workbook = m_Excel.Workbooks.Add
    Dim objHojaExcel As Excel.Worksheet = objLibroExcel.Worksheets (1)
    With objHojaExcel
    . Visible = Excel.XlSheetVisibility.xlSheetVisible
    . Activate ()
    'Capçalera
    . Range ("A1: L1"). Merge ()
    . Range ("A1: L1"). Value = "INSTITUT ARGENCAF"
    . Range ("A1: L1"). Font.Bold = True
    . Range ("A1: L1"). Font.Size = 15
    'Copete
    . Range ("A2: L2"). Merge ()
    . Range ("A2: L2"). Value = títol
    . Range ("A2: L2"). Font.Bold = True
    . Range ("A2: L2"). Font.Size = 12

    Const primeraLetra As Char = "A"
    Const primerNumero As Short = 3
    Dim Lletra As Char, UltimaLetra As Char
    Dim Nombre As Integer, UltimoNumero As Integer
    Dim cod_letra As Byte = Asc (primeraLetra) - 1
    Dim sepDec As String = Application.CurrentCulture.NumberFormat.NumberDecimalSeparator
    Dim sepMil As String = Application.CurrentCulture.NumberFormat.NumberGroupSeparator
    'Establir formats de les columnes de la filla de càlcul
    Dim strColumna As String = ""
    Dim LetraIzq As String = ""
    Dim cod_LetraIzq As Byte = Asc (primeraLetra) - 1
    Lletra = primeraLetra
    Nombre = primerNumero
    Dim objCelda As Excel.Range
    For Each c As DataGridViewColumn In DataGridView1.Columns
    If c.Visible Then
    If Lletra = "Z" Then
    Lletra = primeraLetra
    cod_letra = Asc (primeraLetra)
    cod_LetraIzq + = 1
    LetraIzq = Chr (cod_LetraIzq)
    Else
    cod_letra + = 1
    Lletra = Chr (cod_letra)
    End If
    strColumna = LetraIzq + Lletra + Numero.ToString
    objCelda =. Range (strColumna, Type.Missing)
    objCelda.Value = c.HeaderText
    objCelda.EntireColumn.Font.Size = 8
    'ObjCelda.EntireColumn.NumberFormat = c.DefaultCellStyle.Format
    If c.ValueType Is GetType (Decimal) OrElse c.ValueType Is GetType (Double) Then
    objCelda.EntireColumn.NumberFormat = "#" + sepMil + "0" + sepDec + "00"
    End If
    End If
    Next

    Dim objRangoEncab As Excel.Range =. Range (primeraLetra + Numero.ToString, LetraIzq + Lletra + Numero.ToString)
    objRangoEncab.BorderAround (1, Excel.XlBorderWeight.xlMedium)
    UltimaLetra = Lletra
    Dim UltimaLetraIzq As String = LetraIzq

    'CÀRREGA DE DADES
    Dim i As Integer = Nombre + 1

    For Each reg As DataGridViewRow In DataGridView1.Rows
    LetraIzq = ""
    cod_LetraIzq = Asc (primeraLetra) - 1
    Lletra = primeraLetra
    cod_letra = Asc (primeraLetra) - 1
    For Each c As DataGridViewColumn In DataGridView1.Columns
    If c.Visible Then
    If Lletra = "Z" Then
    Lletra = primeraLetra
    cod_letra = Asc (primeraLetra)
    cod_LetraIzq + = 1
    LetraIzq = Chr (cod_LetraIzq)
    Else
    cod_letra + = 1
    Lletra = Chr (cod_letra)
    End If
    strColumna = LetraIzq + Lletra
    'Aquí hauria de realitzar la càrrega
    . 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). In ()

    End If
    Next
    Dim objRangoReg As Excel.Range =. Range (primeraLetra + i.ToString, strColumna + i.ToString)
    objRangoReg.Rows.BorderAround ()
    objRangoReg.Select ()
    i + = 1
    Next
    UltimoNumero = i

    'Dibuixar les línies de les columnes
    LetraIzq = ""
    cod_LetraIzq = Asc ("A")
    cod_letra = Asc (primeraLetra)
    Lletra = primeraLetra
    For Each c As DataGridViewColumn In DataGridView1.Columns
    If c.Visible Then
    objCelda =. Range (LetraIzq + Lletra + primerNumero.ToString, LetraIzq + Lletra + (UltimoNumero - 1). ToString)
    objCelda.BorderAround ()
    If Lletra = "Z" Then
    Lletra = primeraLetra
    cod_letra = Asc (primeraLetra)
    LetraIzq = Chr (cod_LetraIzq)
    cod_LetraIzq + = 1
    Else
    cod_letra + = 1
    Lletra = Chr (cod_letra)
    End If
    End If
    Next

    'Dibuixar el border exterior gruix
    Dim objRango As Excel.Range =. Range (primeraLetra + primerNumero.ToString, UltimaLetraIzq + UltimaLetra + (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

    Private Sub ToolStripButton2_Click_1 (ByVal sender As System.Object, ByVal i As System.EventArgs) Handles ToolStripButton2.Click
    ExportarDatosExcel (DataGridView1, "exportació")
    End Sub

  12. JuanPeople diu:

    EXCEL.LENT! .... gràcies germà, ja portava 3 dies amb un mòdul de import / export Excel i res donava resultat .... però amb la teva solució torno a veure les estrelles ... salutacions des Arequipa!: ..

  13. TECKNOCK diu:

    Aquest codi m'ha ajudat molt, per això col · laboro amb el meu granet de sorra:

    He optimitzat la funció "nombreColumna" perquè arribi ahsta la columna ZZ (702 cols.)

    Aquí els deixo el codi:

    Public Function nombreColumna (ByVal numero As Integer) As String
    Dim columna (703) As String

    columna (1) = "A"
    columna (2) = "B"
    columna (3) = "C"
    columna (4) = "D"
    columna (5) = "E"
    columna (6) = "F"
    columna (7) = "G"
    columna (8) = "H"
    columna (9) = "I"
    columna (10) = "J"
    columna (11) = "K"
    columna (12) = "L"
    columna (13) = "M"
    columna (14) = "N"
    columna (15) = "O"
    columna (16) = "P"
    columna (17) = "Q"
    columna (18) = "R"
    columna (19) = "S"
    columna (20) = "T"
    columna (21) = "O"
    columna (22) = "V"
    columna (23) = "W"
    columna (24) = "X"
    columna (25) = "I"
    columna (26) = "Z"

    Dim i = 27
    For Ltr1 = 1 To 26
    For Ltr2 = 1 To 26
    columna (i) = columna (Ltr1) & columna (Ltr2)
    i + = 1
    Next
    Next

    Return columna (número)
    End Function

    • Eliseu diu:

      TECKNOCK, moltes gràcies per col · laborar!, Però cal tenir en compte que si el llibre que creem és compatible amb excel 97-2003 el màxim de columnes permeses és de 256 (fins IV). Només com a comentari perquè el tinguin en compte.

      Eliseo

  14. raysip diu:

    Quan executo l'aplicació local funcioana correctament, però quan ho pujo en un lloc web no genera el excel però tampoc surt error

  15. aderson diu:

    mira jo estic haciend 1 conecion a mi sql

    no se com fare el vaig estar fent però aja

  16. PABLO diu:

    necessito ajuda tracti de fer-ho totes les formes que estan aca i em dóna error tot

  17. JUAN diu:

    Mà, ets el màxim FUNCA perfecte.

  18. Neji diu:

    molt bo, felicitats, són dels millors post que he llegit i consultat

  19. Patricia diu:

    Gràcies! Va ser de molta ajuda

  20. f.delgado diu:

    Escolta el codi no em funciona em marca un error en da.fill (ds)

    l'error em marca que no es va trobar sqlException

    em pots ajudar

  21. JAV diu:

    un pregunta es pot fer la càrrega directa de la consulta sql a excel?

    per endavant gràcies

  22. DELFINO MORALES diu:

    hola amic primer que res et agradesco teva aportació.
    fijate que tinc un problema no trobo la referència que indiques, tinc instal · lat office 2010 i no es qual pugui ser el meu problema.
    algun consell t'ho agradeseria.

  23. America diu:

    Hola, molt bona aportació és el que caminava buscat ... però quan ho executo des del servidor de desenvolupament funciona perfecte, però quan accedeixo a la web des d'un altre pc no fa res ... no registra error però no fa res ...

    Algú sap com arreglar?

  24. Hernan Azofeifa diu:

    Moltes gràcies, em va servir molt el teu exemple com a base per generar una funció que em genera un arxiu d'Excel però directament dels valors emmagatzemats en un grid aquí el dejor per si és útil per algú

    '/ / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /
    '/ / Armem la línia amb els títols de columnes
    '/ / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /
    objHojaExcel.Range ("A1"). Select ()
    Dim I As Integer = 0
    Dim lncol As Integer = 1
    For Each dc In dgvSocios.Columns

    If dgvSocios.Columns.Item (I). Visible = True Then
    objHojaExcel.Range (nombreColumna (lncol) & 1). Value = dgvSocios.Columns.Item (I). HeaderText
    lncol + = 1
    End If
    I + = 1
    Next
    fila + = 1

    '/ / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /
    '/ / Li donem format a la fila dels títols
    '/ / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /
    Dim objRango As Excel.Range = objHojaExcel.Range ("A1:" & nombreColumna (lncol) & "1")
    objRango.Font.Bold = True
    objRango.Cells.Interior.ColorIndex = 35

    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 = Excel.XlLineStyle.xlLineStyleNone
    objRango.Cells.Borders (Excel.XlBordersIndex.xlEdgeRight). LineStyle = Excel.XlLineStyle.xlContinuous
    objRango.Cells.Borders (Excel.XlBordersIndex.xlEdgeTop). LineStyle = Excel.XlLineStyle.xlContinuous
    objRango.Cells.Borders (Excel.XlBordersIndex.xlEdgeBottom). LineStyle = Excel.XlLineStyle.xlContinuous

    '/ / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /
    '/ / Carreguem totes les files del datatable
    '/ / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /
    ProgressBar1.Maximum = dgvSocios.Rows.Count
    columna = 0
    ProgressBar1.Value = 0
    ProgressBar1.Visible = True
    Dim lnfila As Integer = 0
    I = 1
    For Each dr In dgvSocios.Rows
    columna = 0

    For Each dc In dgvSocios.Columns
    If dgvSocios.Columns.Item (columna). Visible = True Then
    objHojaExcel.Range (nombreColumna (I) & fila). Value = dgvSocios.Item (columna, lnfila). Value.ToString
    I + = 1
    End If
    columna + = 1
    Next
    lnfila + = 1
    fila + = 1
    ProgressBar1.Value + = 1
    Next

    '/ / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /
    '/ / Ajustem automàticament l'amplada
    '/ / De totes les columnes utilitzada
    '/ / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /
    objRango = objHojaExcel.Range ("A1:" & nombreColumna (lncol) & (lnfila + 1). ToString)
    objRango.Select ()
    objRango.Columns.AutoFit ()

    '/ / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /
    '/ / Diem a Excel que es mostri
    '/ / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /
    Msgbox ("Exportació a Excel completa", MsgBoxStyle.Information, ". :: Solovb.net ::.")
    m_Excel.Visible = True

  25. Pako diu:

    Aportant una mica per a aquesta funció, en el següent codi s'evita l'ús de "Range" per no requerir la funció "nombreColumna"

    Salutacions,

    Imports System.Data
    Imports System.Data.SqlClient
    Imports Microsoft.Office.Interop.Excel
    Public Module mutil
    Public Sub ExportarDtToExcel (ByVal Dt As System.Data.DataTable, ByVal Títol As String)
    Dim m_Excel As Excel.Application
    Dim objLibroExcel As Excel.Workbook
    Dim objHojaExcel As Worksheet
    Try
    '/ / / / / / / / / / / / / / / / / / / / / / / / / / / / /
    '/ / Creem l'Objecte Excel
    '/ / / / / / / / / / / / / / / / / / / / / / / / / / / / /
    m_Excel = CreateObject ("Excel.Application")
    objLibroExcel = m_Excel.Workbooks.Add ()
    objHojaExcel = objLibroExcel.Worksheets (1)
    objHojaExcel.Name = Títol
    objHojaExcel.Visible = Excel.XlSheetVisibility.xlSheetVisible
    objHojaExcel.Activate ()

    '/ / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /
    '/ / Definim dues variables per controlar fila i columna
    '/ / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /
    Dim fila As Integer = 1
    Dim columna As Integer = 1

    '/ / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /
    '/ / Armem la línia amb els títols de columnes
    '/ / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /
    'ObjHojaExcel.Range ("A1"). Select ()

    objHojaExcel.Cells (fila, columna). SELECT ()
    For Each dc In Dt.Columns
    objHojaExcel.Cells (fila, columna). Value = dc.ColumnName
    columna + = 1
    Next
    fila + = 1

    '/ / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /
    '/ / Li donem format a la fila dels títols
    '/ / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /
    Dim objRango As Excel.Range = objHojaExcel.Range (objHojaExcel.Cells (1, 1), objHojaExcel.Cells (1, Dt.Columns.Count))
    objRango.Font.Bold = True
    objRango.Cells.Interior.ColorIndex = 35

    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 = Excel.XlLineStyle.xlLineStyleNone
    objRango.Cells.Borders (Excel.XlBordersIndex.xlEdgeRight). LineStyle = Excel.XlLineStyle.xlContinuous
    objRango.Cells.Borders (Excel.XlBordersIndex.xlEdgeTop). LineStyle = Excel.XlLineStyle.xlContinuous
    objRango.Cells.Borders (Excel.XlBordersIndex.xlEdgeBottom). LineStyle = Excel.XlLineStyle.xlContinuous

    '/ / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /
    '/ / Carreguem totes les files del datatable
    '/ / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /

    columna = 1

    For Each dr In Dt.Rows
    columna = 1
    For Each dc In Dt.Columns
    objHojaExcel.Cells (fila, columna). Value = dr (dc.ColumnName)
    columna + = 1
    Next
    fila + = 1

    Next

    '/ / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /
    '/ / Ajustem automàticament l'amplada
    '/ / De totes les columnes utilitzada
    '/ / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /
    objRango = objHojaExcel.Cells (1, Dt.Columns.Count)
    objRango.Select ()
    objRango.Columns.AutoFit ()

    '/ / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /
    '/ / Diem a Excel que es mostri
    '/ / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /
    Msgbox ("Exportació a Excel completa", MsgBoxStyle.Information, "Exportar")
    m_Excel.Visible = True

    Catch ex As Exception

    Msgbox (ex.ToString)

    Finally

    objHojaExcel = Nothing
    objLibroExcel = Nothing
    m_Excel = Nothing

    End Try
    End Sub

    End Module

  26. pamela diu:

    si us plau algú m'explica d'on surt el progress1??

Comentar