[VB.Net] Exportar DataSet a Excel
by P-los on Aug.30, 2009, under Funciones
Recientemente me solicitaron para un proyecto que los reportes se mandaran directamente a Excel. He aquí una pequeña función capaz de exportar cualquier DataSet a un archivo de Excel:
Public Sub ExportarArchivo(ByVal archivo As String, ByVal datos As DataSet)
Dim xl As New Microsoft.Office.Interop.Excel.ApplicationClass
Dim wBook As Microsoft.Office.Interop.Excel.Workbook
Dim wSheet As Microsoft.Office.Interop.Excel.Worksheet
wBook = xl.Workbooks.Add
wSheet = wBook.ActiveSheet
Dim colIndex As Integer = 0
Dim rowIndex As Integer = 0
For Each dc As System.Data.DataColumn In datos.Tables(0).Columns
colIndex = colIndex + 1
xl.Cells(1, colIndex) = dc.ColumnName
Next
For Each dr In datos.Tables(0).Rows
rowIndex = rowIndex + 1
colIndex = 0
For Each dc In datos.Tables(0).Columns
colIndex = colIndex + 1
xl.Cells(rowIndex + 1, colIndex) = dr(dc.ColumnName)
Next
Next
wSheet.Columns.AutoFit()
Dim blnFileOpen As Boolean = False
Try
Dim fileTemp As System.IO.FileStream = System.IO.File.OpenWrite(archivo)
fileTemp.Close()
Catch ex As Exception
blnFileOpen = False
End Try
If System.IO.File.Exists(archivo) Then
System.IO.File.Delete(archivo)
End If
wBook.SaveAs(archivo)
xl.Workbooks.Open(archivo)
xl.Visible = True
End Sub
Para que no cause errores, hay que agregar como referencia la siguiente:
Microsoft.Office.Interop.Excel
Espero les sea tan util como a mi!
February 15th, 2010 on 5:37 pm
Impecable tu articulo, te felicito por compartirlo.
Un solo detalle en una linea 12 y 14 que lo corregí, además, lo modifique un poquito para que sirva como clase para llamarlo desde cualquier form, y tomando en cuenta un dataset con varios datatable. a continuación el codigo y nuevamente gracias !!!
Public Sub ExportarArchivo(ByVal archivo As String, ByVal datos As DataSet, ByVal tabla As String)
Dim xl As New Microsoft.Office.Interop.Excel.ApplicationClass
Dim wBook As Microsoft.Office.Interop.Excel.Workbook
Dim wSheet As Microsoft.Office.Interop.Excel.Worksheet
wBook = xl.Workbooks.Add
wSheet = wBook.ActiveSheet
Dim colIndex As Integer = 0
Dim rowIndex As Integer = 0
For Each dc As System.Data.DataColumn In datos.Tables(tabla).Columns
colIndex = colIndex + 1
xl.Cells(1, colIndex) = dc.ColumnName
Next
For Each dr As System.Data.DataRow In datos.Tables(tabla).Rows
rowIndex = rowIndex + 1
colIndex = 0
For Each dc As System.Data.DataColumn In datos.Tables(tabla).Columns
colIndex = colIndex + 1
xl.Cells(rowIndex + 1, colIndex) = dr(dc.ColumnName)
Next
Next
wSheet.Columns.AutoFit()
Dim blnFileOpen As Boolean = False
Try
Dim fileTemp As System.IO.FileStream = System.IO.File.OpenWrite(archivo)
fileTemp.Close()
Catch ex As Exception
blnFileOpen = False
End Try
If System.IO.File.Exists(archivo) Then
System.IO.File.Delete(archivo)
End If
wBook.SaveAs(archivo)
xl.Workbooks.Open(archivo)
xl.Visible = True
End Sub
February 17th, 2010 on 2:00 pm
que tal oye muy buen codigo pero cuando lo quiero poner el un server o en un server IIS me dice que no se pude encontrar el archivo fulanito.xls pero en el .net trabaj muy bien