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 referència a 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:

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.
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 .....
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!
m'ho vaig a guardar ...
en algun moment serà útil ...
É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
Tremendo codi font. em va servir de molt. era el q necessitava des de fa temps.
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
Hola Moltes gràcies!! aquesta excel · lent!
Però em pregunto on s'especifica que DataGrid usés EN el cas que estiguin diversos DataGrid?
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
Tinc un problema amb aquest exemple em marca 2 errors en les variables dc i dr, que puc fer per solucionar-ho??
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.
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
llest ja subi a article
http://jaysson.blogspot.com/2010/06/columnas-es-excel.html
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.
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!
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
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!: ..
De res. M'alegra que et va servir l'exemple.
hola disculpa d'on surt el progressbar1??? estic intentant fer però em blokie en aquesta part
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
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
Quan executo l'aplicació local funcioana correctament, però quan ho pujo en un lloc web no genera el excel però tampoc surt error
mira jo estic haciend 1 conecion a mi sql
no se com fare el vaig estar fent però aja
necessito ajuda tracti de fer-ho totes les formes que estan aca i em dóna error tot
Mà, ets el màxim FUNCA perfecte.
[...] [...]
molt bo, felicitats, són dels millors post que he llegit i consultat
Gràcies! Va ser de molta ajuda
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
un pregunta es pot fer la càrrega directa de la consulta sql a excel?
per endavant gràcies
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.
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?
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
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
si us plau algú m'explica d'on surt el progress1??