En algunas ocasiones queremos que toda la información que estamos desplegando con un GridView se exporte automáticamente a un archivo de Excel desde nuestra aplicación ASP.NET 3.5 o superior.

Para hacerlo, basta colocar un GridView vacío en nuestra página (puede ser uno diferente al que utilizas para mostrar la información en HTML).

<asp:GridView ID="GridViewExcel" runat="server">
</asp:GridView>

También necesitamos un botón que al ser presionado haga la exportación:

<asp:LinkButton ID="ExportarAExcel" runat="server">Exportar a Excel</asp:LinkButton>

Necesitamos utilizar la librería EPPlus. Solamente descárgala y coloca los archivos EPPlus.dll y EPPlus.XML en la carpeta Bin de tu proyecto.

Por último, aquí está el código que hace la exportación:

Protected Sub ExportarAExcel_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles ExportarAExcel.Click
   Dim gv As GridView
   'Estoy obteniendo la información de mi Business Logic Layer, pero lo puedes hacer
    'de la manera en la que estés acostumbrado
    Dim Logica As New BLLUsers()
    Dim DTable As DSEmpresa.usersDataTable
    DTable = Logica.GetData()
    gv.DataSource = DTable
    gv.DataBind()
 
   Dim excelPackage = New ExcelPackage
   Dim excelWorksheet = excelPackage.Workbook.Worksheets.Add("Hoja 1")
   excelWorksheet.Cells("A1").LoadFromDataTable(Dset, True)
   Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
   Response.AddHeader("content-disposition", "attachment;  filename=UsuariosExportados.xlsx")
   Dim stream As MemoryStream = New MemoryStream(excelPackage.GetAsByteArray())
   Response.OutputStream.Write(stream.ToArray(), 0, stream.ToArray().Length)
   Response.Flush()
   Response.Close()    
 
End Sub
 
 
Public Overrides Sub VerifyRenderingInServerForm(ByVal control As Control)
    'Este override debe estar aqui ya que si no aparecera un error
    'indicando que el Gridview debe estar dentro de un form runat=server
End Sub

Y listo, con eso podrás exportar tu información a Excel.

Éste método funciona mejor que el viejito que había escrito aquí.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *


+ 6 = diez