Crear reportes en Excel con ASP.NET
|
. |
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 FunctionPara 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.
Fichero con el c�digo de ejemplo: juceduba_ASPinExcel.zip - 2 KB