Hola,
Quiero exportar datos de un DataGridView a un archivo Excel (*.xls) utilizando VB.Net (2010)
He buscado y he encontrado este sistema y similares:
https://techperu.wordpress.com/2011/10/25/exportar-de-datagridview-a-excel-vb-net-y-sql-server/
Y vale, funciona, pero tiene dependencia con EXCEL . Esto conlleva que si se utiliza en un sistema sin Office y sin Excel, no se puede exportar los datos a un fichero excel. Lógicamente, yo no quiero esto :¬¬
............
Bueno, encontré la forma :xD
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
DATAGRIDVIEW_TO_EXCEL((DataGridView1)) ' PARAMETER: YOUR DATAGRIDVIEW
End Sub
Private Sub DATAGRIDVIEW_TO_EXCEL(ByVal DGV As DataGridView)
Try
Dim DTB = New DataTable, RWS As Integer, CLS As Integer
For CLS = 0 To DGV.ColumnCount - 1 ' COLUMNS OF DTB
DTB.Columns.Add(DGV.Columns(CLS).Name.ToString)
Next
Dim DRW As DataRow
For RWS = 0 To DGV.Rows.Count - 1 ' FILL DTB WITH DATAGRIDVIEW
DRW = DTB.NewRow
For CLS = 0 To DGV.ColumnCount - 1
Try
DRW(DTB.Columns(CLS).ColumnName.ToString) = DGV.Rows(RWS).Cells(CLS).Value.ToString
Catch ex As Exception
End Try
Next
DTB.Rows.Add(DRW)
Next
DTB.AcceptChanges()
Dim DST As New DataSet
DST.Tables.Add(DTB)
Dim FLE As String = "" ' PATH AND FILE NAME WHERE THE XML WIL BE CREATED (EXEMPLE: C:\REPS\XML.xml)
DTB.WriteXml(FLE)
'Dim EXL As String = "" ' PATH OF/ EXCEL.EXE IN YOUR MICROSOFT OFFICE
'Shell(Chr(34) & EXL & Chr(34) & " " & Chr(34) & FLE & Chr(34), vbNormalFocus) ' OPEN XML WITH EXCEL
Catch ex As Exception
MsgBox(ex.ToString)
End Try
End Sub
Como ves he anulado las líneas...
'Dim EXL As String = "" ' PATH OF/ EXCEL.EXE IN YOUR MICROSOFT OFFICE
'Shell(Chr(34) & EXL & Chr(34) & " " & Chr(34) & FLE & Chr(34), vbNormalFocus) ' OPEN XML WITH EXCEL
Porque hacen referencia a Excel.exe y estas líneas solo sirven para mostrar el archivo una vez guardado.
El código lo encontré aquí:
http://stackoverflow.com/questions/680199/how-to-export-datagridview-to-excel-using-vb-net
Saludos
Bueno..., bueno... Me he visto obligado a hacer una rectificiación. El código anterior que se supone que exporta los datos de un DataGridView a un archivo de formato XLS (hoja de cálculo de Excel), no hace tal cosa. Lo que hace es crear un archivo XML, con extensión XLS.. El que lo posteó hizo un poco de trampa... Me he sentido un poco engañado. Al intentar abrirlo como archivo XLS mediante conexión Oledb. Me daba error por ser formato incorrecto, ya que como digo en realidad era XML. Fíjate en la línea 34 que pone DTB.WriteXml(FLE). Como ves lo que crea es un archivo XML.
Como lo único que me intersaba era poder exportar e importar datos, el formato realmente era irrelevante. Así que lo que he hecho es usar este código para importar datos de un archivo XML (creado con el código anterior) a un DataGridView.
Public Sub AbrirXML(ByVal dtaGrdVew As DataGridView)
Dim xmlFile As XmlReader
dtaGrdVew.Columns.Clear()
xmlFile = XmlReader.Create("01.xml", New XmlReaderSettings())
Dim ds As New DataSet
ds.ReadXml(xmlFile)
dtaGrdVew.DataSource = ds.Tables(0)
End Sub