Crear reportes en Excel con ASP.NET

Fecha: 11/Jul/2004 (08 de julio del 2004)
Autor: Julio César Duran Barragán

.

Lo que necesitamos para comenzar es tener instalado Microsoft Excel en el servidor. Adem�s necesitas dar los permisos que se necesita para el uso de el Excel desde ASP .Net, esto lo haremos a�adiendo al archivo web.config de la aplicaci�n la siguiente l�nea:

<identity impersonate="true"/>

o en dado caso configurar la aplicaci�n con una cuenta que cuente con los permisos necesarios para la ejecuci�n de Excel. Adem�s de estas cosas necesitamos dar privilegios de escritura al directorio donde vaya a ejecutarse la aplicaci�n. Comencemos abriendo un nuevo proyecto de asp.net en Visual Studio .Net. Para esto vamos a hacer uso de COM Interop. Entonces vamos a agregar una referencia a nuestro proyecto desde el explorador de soluciones, en el elemento referencia damos un clic derecho sobre la carpeta referencias y despu�s damos agregar referencia, seleccionamos Microsoft Excel Object Library, damos agregar y despu�s aceptamos el cuadro de di�logo, esto agregar� una referencia a nuestro proyecto que nos permitir� hacer uso de la riqueza que nos proporciona esta librer�a.
Abrimos el codebehind de Webform1 e importamos el siguiente namespaces:

Imports System.Runtime.InteropServices.Marshal

 

A continuaci�n sigue c�digo en Visual Basic:

Private Sub Page_Load(ByVal sender As System.Object, _
    ByVal e As System.EventArgs) Handles MyBase.Load
    Dim oExcel As New Excel.Application
    Dim oBooks As Excel.Workbooks, oBook As Excel.Workbook
    Dim oSheets As Excel.Sheets, oSheet As Excel.Worksheet
    Dim oCells As Excel.Range
    Dim sFile As String, sTemplate As String
    Dim dt As DataTable = CType(Application.Item("MyDataTable"), DataTable)

    sFile = Server.MapPath(Request.ApplicationPath) & "\MyExcel.xls"
    sTemplate = Server.MapPath(Request.ApplicationPath) & "\MyTemplate.xls"
    oExcel.Visible = False : oExcel.DisplayAlerts = False

    'Start a new workbook 
    oBooks = oExcel.Workbooks
    oBooks.Open(Server.MapPath(Request.ApplicationPath) & "\MyTemplate.xls") 'Load colorful template with graph
    oBook = oBooks.Item(1)
    oSheets = oBook.Worksheets
    oSheet = CType(oSheets.Item(1), Excel.Worksheet)
    oSheet.Name = "First Sheet"
    oCells = oSheet.Cells
    DumpData(dt, oCells)
    oSheet.SaveAs(sFile)
    oBook.Close()

    'Quit Excel and thoroughly deallocate everything
    oExcel.Quit()
    ReleaseComObject(oCells)
    ReleaseComObject(oSheet)
    ReleaseComObject(oSheets)
    ReleaseComObject(oBook)
    ReleaseComObject(oBooks)
    ReleaseComObject(oExcel)
    oExcel = Nothing
    oBooks = Nothing
    oBook = Nothing
    oSheets = Nothing
    oSheet = Nothing
    oCells = Nothing
    System.GC.Collect()
    Response.Redirect(sFile)
End Sub

'Outputs a DataTable to an Excel Worksheet
Private Function DumpData(ByVal dt As DataTable, ByVal oCells As Excel.Range) As String
    Dim dr As DataRow, ary() As Object
    Dim iRow As Integer, iCol As Integer

    'Output Column Headers
    For iCol = 0 To dt.Columns.Count - 1
        oCells(2, iCol + 1) = dt.Columns(iCol).ToString
    Next

    'Output Data
    For iRow = 0 To dt.Rows.Count - 1
        dr = dt.Rows.Item(iRow)
        ary = dr.ItemArray
        For iCol = 0 To UBound(ary)
            oCells(iRow + 3, iCol + 1) = ary(iCol).ToString
            Response.Write(ary(iCol).ToString & vbTab)
        Next
    Next
End Function

Para comenzar declaramos algunas variables necesarias y cargamos algunos datos, despu�s generamos unos archivos temporales a partir de documentos contenidos en el directorio de la aplicaci�n. Entonces damos la orden a Excel para que no nos muestre ning�n mensaje o pop up o cualquier otro IU y creamos una Hoja en blanco. Despu�s introducimos los elementos de la tabla por medio de un ciclo en la celda que corresponda, Y por �ltimo guardamos en un archivo temporal en el servidor. La ventaja que tenemos al usar esta forma para crear reportes es que como se pudieron dar cuenta el archivo de Excel que se abri� se tom� de uno ya creado, entonces se puede agregar un gr�fico y al introducir los nuevos datos el gr�fico tomar� los valores introducidos como validos adem�s de que el formato se le puede dar con anterioridad.




ir al ndice

Fichero con el c�digo de ejemplo: juceduba_ASPinExcel.zip - 2 KB