Exportar datos de un DataGridView a un archivo Excel

Iniciado por okik, 29 Enero 2015, 18:36 PM

0 Miembros y 1 Visitante están viendo este tema.

okik

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

Código (vbnet) [Seleccionar]
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...

Código (vbnet) [Seleccionar]
     '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

okik

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

Código (vbnet) [Seleccionar]

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