Skip to main content

Ultimos Posts:

Comparativa: Tecnicas de exportación / generación Excel sobre ASP .net
Fecha entrada: Nov 2007 Palabras Clave: ASP .net; GridView; SSAS; SSRS; Performance; XML; Open XML; .net framework 3.0; Web Services; Office; XSL; DataSet; HTML; Excel; Sharepoint; CSV; DHTML; Excel Services;
Resumen post:

En la actualidad existen un buen número de tecnologías diferentes para genera informes o volcar información a Excel desde ASP .net, ... pero ninguna es la "formula mágica" que se adapta a todo tipo de escenarios... en unos casos tienes gastar un dinero en licencias, en otros pagas una penalización en rendimiento, en otros tienes limitaciones de formato, o incluso tienen una complejidad elevada...

Esta entrada del blog intenta arrojar algo de luz sobre esta area y facilitar el proceso de selección de que tecnología escoger.

Post:

Casí todas las aplicaciones web que tienen que ver con el mundo de los negocios, tenemos como requerimiento implementar la capacidad/funcionaldad de realizar exportaciones/volcados a Excel: gridviews, informes...

Si buceamos un poco por internet y preguntamos a otros compañeros nos encontraremos que hay un montón de formas de hacer esto en ASP .net, pero ninguna es la "formula mágica" que se adapta a todo tipo de escenarios... en unos casos tienes gastar un dinero en licencias, en otros pagas una penalización en rendimiento, en otros tienes limitaciones de formato, o incluso tienen una complejidad que hace que no se ajuste al marco de tiempo que tienes en tu proyectos para desarrollarla...

Esta entrada del blog intenta arrojar algo de luz sobre esta area y facilitar el proceso de selección de que tecnología escoger para generar informes / volcar información a excel en nuestra aplicación web. Vamos a comparar / evaluar:

  • --> Formato CSV.
  • --> Formato XMLSS.
  • --> Volcado de un GridView a Excel.
  • --> OWC (Office Web Components).
  • --> Reporting Services.
  • --> Reporting Services + Office Writer.
  • --> Sharepoint Excel Services.
  • --> (*)

(*) Date cuenta que no he incluido como tecnología valida automation/VBA model, eso es debido a que no está recomendado ni tiene soporte de Ms para desarrollo web (para más información puedes leer KB257757).

Formato CSV

La aproximacíon más antigua para generar un fichero compatible con Excel consiste en generar un ficheros de text, en el que delimitamos las filas con el caracter de salto de línea (\r\n), y las columnas de una fila las separamos por comas o punto y coma (en los casos en los que una columna contenga comas, hay una secuencia de escape para que no se cofunda con el separador de columnas), por ejemplo:

123,John, Werk\r\n
124,Peter, Tol\r\n
(…)

Si lo que necesitas es volcar datos a Excel, y no tienes (ni vas a tener en un futuro :-)) ningún requerimiento de formato, formulas, o cosas bonitas... este approach es muy fácil de implementar, tanto usando un datareader + stream writer como utilizando tecnología XSL.

Factor Puntuación Commentarios
No hace falta instalar componentes adicionales en el servidor Sólo tienes que crear ficheros o strams que son ficheros de texto estándares.
No hace falta instalar componentes adicionales en el lado del cliente Cualquier Office es capaz de procesar el formato csv, incluso en plataformas no windows.
Fácil / Rápido de desarrollar Sólo tienes que usar un datareader y escribir cada fila a un fichero de texto, una forma más elegante es usar una plantilla XSL.
Rendimiento / Rapidez de generación Si usas un datareader y vuelcas el contenido como un stream writer, va como una moto.
Coste / Licencias Gratis
Problemas con Office 2007 No
Compatibilidad con versiones anteriores de Office Cualquier versión de Office puede leer este formato
Respeta el layout de las celdas Si, no hay problema de que se solapen columans.
Admite formato No, texto plano, olvídate de usar negritas, cursivas, colores...
Soporta formulas No
Soporta gráficas No
Soporta Macros No
Puede alimentarse de una fuente OLAP Si, tu eres el responsable de darle los datos al CSV y ejecutar el datareader.
Se puede combinar con tecnologías XSL Si, pero si tienes que generar ficheros CSV enormes, puedes tener problemas de rendimiento.

Formato XMLSS

Las siglas de XMLSS vienen de "XML SpreadSheet Format" (Format XML de hojas de calculo). El uso de este formato es bastante popular en las aplicaciones web. Este formato fue introducido en Office 2002, y cubre un subconjunto de la funcionalidad excel, utilizando como base el formato XML (soporta características tales como formateo, negritas / colores..., y formulas, pero no otras como por ejemplo macros, gráficas).

Factor Puntuación Comentarios
No hace falta instalar componentes adicionales en el servidor Con tener un XML (si no te quieres complicar, un DataSet ya te da el formato XML), y una plantilla XSL, utilizando el .net framework puede realizar las transformaciones necesarias, de esta forma no tienes que calentarle la cabeza a los administradores de tu sistema con instalaciones de componentes adicionales, o posibles problemas de rendimiento al usar componentes pesados :-).
No hace falta instalar componentes adicionales en el lado del cliente Le envías al cliente un flujo que es 100 % un fichero excel valido (en formato XMLSS). No hace falta instalar ningún software adicional que no sea el propio Excel (2002 o superior).
Fácil / Rápido de desarrollar Hay un montón de ejemplos disponibles en la red (puedes empezar a buscar por este mismo sitio web :-)), además si creas una hoja con Excel y la grabas en formato XML, con unos pequeños retoques lo puedes convertir a plantilla XSL (Bueno… esto es cierto para hojas excel con una complejidad normal).
Rendimiento / Rapidez de generación He utilizado este approach en diferentes escnarios, teneindo buenas resultados de rendimiento (el excel se genera localmente en el servidor, no hace falta llamar a servicios web ni comunicarnos con servidores de informes).
Coste / Licencias Gratis, a fin de cuenta estás jugando con estándares como with XML/XSL
Problemas con Office 2007 Si grabas el fichero con extensión XLS en vez de XML, Office 2007 te mostrará un mensaje de alerta indicando que no es un fichero excel valido, si le das a continuar te abre el fichero correctamente, este problema está reconocido por Ms, y posiblemente en un futuro se incluya un fix en algún service pack.
Compatibilidad con versiones anteriores de Office Necesita Office 2002 o superior (¿ Quién demonios sigue usando 2000 o 97?).
Respeta el layout de las celdas Tienes un control fino sobre como distribuir los datos en las celdas.
Admite formato Puedes usar fuentes, colores, ...
Soporta formulas Puedes utilizar formulas, si pones una formula debajo de una tabla que puede crecer, utilizar posiciones relativas para definirlas.
Soporta gráficas No, no soporta gráficas, no soporta agrupaciones, ... ten cuidado de prometer cosas como estás a tu cliente, no hay forma de implementarlas utilizando XMLSS, es una limitacíon.
Soporta Macros No.
Puede alimentarse de una fuente OLAP Como tu eres el que lee de la fuente de datos y se la pasa como XML a la plantilla XMLSS, depende de ti que lo alimentes desde una base de datos transaccional o analítica.
Se puede combinar con tecnologías XSL Desde luego, ese es el punto fuerte de esta tecnología.

DataGrid / GridView HTML dump into Excel

Excel es medio capaz de leer HTML, tomando esto en consideración, y teneiendo en cuenta que los controles GridView y DataGrid a fin de cuentas lo que generan es HTML, y utilizando algunaos hacks puede redigir esa salida HTML a un content-file de Excel. Está solución es rápida, pero no es muy limpia, usala si no llegas y tienes que entregar ya tu proyecto (si es el antojo de última hora que ha tenido tu cliente). Está solución sólo te valdrá si tienes que exportar los resultados de un GridView, y no te piden que cambies formatos ni añadas formulas... (ni te lo van a pedir en un futuro).

Factor Puntuación Comentarios
No hace falta instalar componentes adicionales en el servidor Es un hack, con lo que trae el .net framework tienes más que suficiente, no hace falta instalar nada raro.
No hace falta instalar componentes adicionales en el lado del cliente No, a fin de cuentas le envías al cliente un fichero/flujo indicando en el content type que es un fichero Excel, no te hace falta instalar nada en la parte cliente.
Fácil / Rápido de desarrollar Este es el punto fuerte de esta solución, si utilizas el gridview/datagrid estándar es muy rápido de implementar.
Rendimiento / Rapidez de generación No se han detectado problemas hasta ahora.
Coste / Licencias Este hack es gratis :-).
Problemas con Office 2007 A Office 2007 no le gusta que el fichero tenga extensión XLS, y te dirá que no es un fichero valido, si pulsas en continuar te cargará el ficheor correctamente.
Compatibilidad con versiones anteriores de Office No he detectado problemas de compatibilidad (puede que con 97/98 esta solución no funcione).
Respeta el layout de las celdas Con esta solucíon no tienes mucho control sobre el layout / disposción de celdas, si tu cliente quiere un layout especial comenzarás a tener problemas..., no es fácil de manipular. Antes de ir a por esta solución, dejale claro a tu cliente que es buena sólo para obtener informes tabulares que tengan el mismo aspecto que el GridView que están viendo en pantalla.
Admite formato Limitado, te replica lo que tienes en el Grid, pero realizar cambios se puede convertir en una pesadilla.
Soporta formulas No, y aunque se pudiera es muy dificil cambiar el rendering para que las genere y las exporte a Excelo, si te piden formulas elige otra opción, como por ejemplo XMLSS.
Soporta gráficas No.
Soporta Macros No.
Puede alimentarse de una fuente OLAP Si tu GridView lee de una fuente OLAP / consulta MDX, puedes aplicar el hack sin problemas.
Se puede combinar con tecnologías XSL No, es un hack sucio y rápido, ... funciona y punto :-)


OWC

Office web components fueron incluidos en Office 2002 y 2003 para cubrir la necesidad de "tener Excel en la web", basicamente se divide en dos productos:

  • Un motor de generación de gráficas en servidor: Muy bueno y potente, genera la gráfica en el serivdor, la convierte a imagen (jpg, ...) y la envía como fichero gráfico a l cliente, de esta forma la gráfica genereada puede ser consumida por cualquier navegador web, teniendo exactamente el mismo aspecto de una gráfica excel generada con 2002 / 2003 (eso si, es una imagen estática). Puede usar este approach tanto en intranets como extranets.
  • Unos componentes ActiveX para mostrar en la web Hojas Excel y Pivot Tables: Con este componente puedes tener una hoja excel o una pivot table simplifica dentro de una página web. Este componente tiene un gran PERO... y de ahí que no sea del agrado de todos lo desarrolladores, ... se puede usar en una intranet, pero hasta en una intranet nos hará falta instalar un componente ActiveX en el cliente, y si necesitas leer de una fuente de datos que está en un servidor te hará falta habilitar "cross domain scripting", esto es algo peligroso, y corremos el riesgo de que los ordenadores de nuestros clientes sean vulnerables a ataques si no está bien configurado.
    Por otro lado, es una forma fácil de navegar por cubos OLAP utilizando pivot tables.

Una cosa importante a tener en cuenta es que, aunque OWC tendrá soporte oficial de Microsoft hasta el 2011, no habrán nuevas versiones, este producto va a ser descatalogado.

Factor Puntuación Comentarios
No hace falta instalar componentes adicionales en el servidor No necesitas instalar Office, pero si algunos componentes.
No hace falta instalar componentes adicionales en el lado del cliente La parte de generación de gráficas no lo necesitas (envía al cliente imagenes estándar).

La parte de hojas excel en entorno web obligan a que instales un control ActiveX y si quieres leer de por ejemplo fuentes OLAP, que hagas unos cambios de configuración en tu IE, e incluso si tu servidor OLAP está detrás de un firewall que los chicos de IT te lo configuren para que tu máquina cliente pueda acceder al mismo (se establece una conexión directa a la fuente de datos).
Fácil / Rápido de desarrollar Para la generacíon de gráficas, tendrás que escribir código (es algo tedioso).

Para las hojas Excel en la web, tendrás que trabajar con las configuraciones (no es algo directo y es peligroso, un error al configurar el navegador podría llevar a que tuvieramos un agujero de seguridad en nuestro sistema).
Rendimiento / Rapidez de generación No se han encontrado problema de rendimiendo en al solución de gráficas. No issues found so far on the charting solution.

En al de Pivot Tables, si estás accediendo a un cubo OLAP, depende de donde esté el servidor, de como de grande sea el cubo, y de cuantos datos quieras visualizar/analizar.
Coste / Licencias No tiene un coste adiciones (bueno necesitas tener la licencias de Office).
Problemas con Office 2007 La solución de gráficas, genera gráficas exactamente iguales que las de Offce 2002 y 2003, pero no puede generarlas con los estilos nuevos de 2007 ya que Ms no lo ha actualizado para esta versión.
Compatibilidad con versiones anteriores de Office N/A
Respeta el layout de las celdas N/A
Admite formato Las gráficas soportan el format de Excel 2003 / 2003, sólo debemos tener en cuenta que estas se generar como imágenes estáticas.
Soporta formulas El control ActiveX de Hojas Excel soporta formulas.
Soporta gráficas En la parte de gráfica si (como imágenes estáticas).
Soporta Macros No.
Puede alimentarse de una fuente OLAP El componente de pivot tables soporte cubos OLAP como fuente de datos.
Se puede combinar con tecnologías XSL Para generar gráficas y no tener que utilizar código repetitivo, podrías definir un modelo XML, y interpretarlo con un motor que desarrollaras en base a dicho XML, esto tiene un montón de trabajo, pero es posible implementarlo.
Reporting Services (SSRS)

SQL Server 2000 y 2005 tiene incorporado un servidor de informes, para diseñar los informes puedes utilizar Visual Studio o Reporting builder, una vez construidos, puedes subirlos al servidor y integrarlos con tu aplicación web via web services, query string o post, y en diferentes formatos (HTML, PDF, Excel, …).

Factor Puntuación Comentarios
No hace falta instalar componentes adicionales en el servidor Depende de si el servidor de reporting lo tenemos en un servidor separado, si tienes que instalarlo en la misma máquina tienes que añadir esta instalación a tu servidor.

Si vas a tener un servidor SSRS dedicado, te tienes que asegurar de que tu serverdor web puede ver a dicho servidor (que estén en la misma zona o que los firewalls estén configurados para que se vean).
No hace falta instalar componentes adicionales en el lado del cliente No hace falta, el navegaodr por defecto de Reporting Services es HTML, y si accedes via servicios web puedes obtener en un stream el fichero excel generado.
Fácil / Rápido de desarrollar La experiencia de diseño de informes es parecida a la que tendríamos usando Crystal Reports (visual), e integrar los informes en nuestra aplicación web via servicios web es fácil y está bien documentado.
Rendimiento / Rapidez de generación Si tienes que generar ficheros excel enormes (más de 6000 filas), es lento, mejor usar la extensión de Office Writer para SSRS.
Coste / Licencias Si ya tienes licencia de SQL Server, tienes licencia para Reporting Services, si no tienes que comprar el producto (o utilizar la versión gratuita SQL Server Express).
Problemas con Office 2007 Genera Excel en formato binario, no hay forma (al menos hasta la versión 2005) de generarlo en formato Open XML de Excel 2007 (pero se puede leer sin ningún problemas desde Excel 2007).
Compatibilidad con versiones anteriores de Office 100 % compatible (genera formato binario nativo de Excel). Fully compatible (generates binary format).
Respeta el layout de las celdas No siempre, para informes tabulares, normalmente si, para informes matriciales si quieres usar algo especial como cabeceras en el área de las filas te puedes encontrar con problemas para cuadrar las celdas (que todas sean consecutivas), aquí te puedes encontrar con un problema si tu cliente quiere hacer sus cálculos sobre una hoja generada de SSRS (haz una prueba de concepto primero y mira si le encaja).
Admite formato Fuentes, colores, separaciones en hojas diferentes... (puede que alguna característica avanzada de excel no la soporte).
Soporta formulas Algunos campos calculados se exportan como formulas.
Soporta gráficas Los gráficos se exportan como imagenes estaticas (no son objetos de gráfica excel).
Soporta Macros No.
Puede alimentarse de una fuente OLAP Si, este es un de los puntos fuertes de esta solucíon, soporta totalmente OLAP / MDX / Cubos.
Se puede combinar con tecnologías XSL N/A


Reporting Services + Office Writer

Soft Artisans vende una extensión custom para reportin services que te permite diseñar informes directamente con Excel, mantiendo una alto grado de control sobre el layout / formulas / Macros, en formato binario nativo excel, y con un rendimiento excelente. Limitaciones: actualmente no soporta reporting basado en cubos/OLAP.

Factor Puntuación Comentarios
No hace falta instalar componentes adicionales en el servidor Tienes que instalar estas rendering custom extensions en el servidor de reporting, y en las máquinas de los desarrolladores el plugin para diseñar informes en Excel.
No hace falta instalar componentes adicionales en el lado del cliente El Excel se envía como un stream (en formato binario nativo de Excel), no te hace falta instalar nada en las máquinas cliente.
Fácil / Rápido de desarrollar Es muy fácil y visual crear informes usando el plugin de Excel.
Rendimiento / Rapidez de generación Muy buen rendimiento, se nota sobre todo cuando tienes que generar ficheros enormes.
Coste / Licencias Microsoft ha comprado este producto, pero no se incluirá en el paquete de SQL Server hasta (quizás) Junio del 2008.

Puedes chequear precios en la página de SoftArtisas, hay una versión Standard y otra Enteprise.
Problemas con Office 2007 Generá Excel formato binario, no hay forma de configurarlo para que genere en formato Open XML 2007 (aunque el fichero exportado lo lee Excel 2007 sin ningún problema).
Compatibilidad con versiones anteriores de Office Totalmente compatible (formato binario de Excel).
Respeta el layout de las celdas Si, de hecho el informe lo generas directamente en Excel, con lo que tienes un control muy fino sobre posicionamiento de las celdas.
Admite formato Todo el formato de Excel (ojo, en caso de ser funcionalidad nueva de Excel 2007 habría que chequearlo).
Soporta formulas Si.
Soporta gráficas Si, además objetos gráficos nativos de Excel.
Soporta Macros Si.
Puede alimentarse de una fuente OLAP No, esto es una limitación, Microsoft está trabajando en este area.
Se puede combinar con tecnologías XSL N/A
Sharepoint Excel Services

Esta plataforma te permite visuallizar y editar ficheros Excel en un entorno web puro HTML. Incluso te permite usar una hoja Excel como motor de calculo y exponerla via servicios web.

Factor Puntuación Comentarios
No hace falta instalar componentes adicionales en el servidor Si, te tienes que instalar Sharepoint...
No hace falta instalar componentes adicionales en el lado del cliente El cliente es HTML 100 %.
Fácil / Rápido de desarrollar Si, ... si eres bueno manejando Excel :-).
Rendimiento / Rapidez de generación Si.
Coste / Licencias Chequea los precios por licencias en el sitio web de Microsoft.
Problemas con Office 2007 Soporta un amplio rango de Open XML (por ejemplo no soporta Macros).
Compatibilidad con versiones anteriores de Office Si los usuarios quieren descargar a local las hojas excel, Excel Services funciona con Open XML (los usuarios finales necesitan tener instalado Office 2007, o los packs de compatibilidad para versiones anteriores).
Respeta el layout de las celdas Si.
Admite formato Si.
Soporta formulas Si.
Soporta gráficas Si.
Soporta Macros Si.
Puede alimentarse de una fuente OLAP Si.
Se puede combinar con tecnologías XSL N/A
Open XML

Open XML es el formato estándar para Office 2007, basicamente es un fichero zip que contienen XML y partes en binario. Es muy potente, pero también complejo de manejar (se supone que Microsoft publicará en un futuro cercano unas librerías tipo VBA/Automation para generar estos ficheros sin que el desarrollador tenga que conocer los detalles internos de este formato). En este momento el SDK que tiene Ms está bastante limitado (aunque es mejor usar ese que nada :-)).

Factor Puntuación Comentarios
No hace falta instalar componentes adicionales en el servidor Es más fácil para desarrollar si usas el .net fx 3.0 y el Ms SDK para Open XML, pero tendrás que instalar algunas DLL's más en tu aplicacíon web (nada del otro jueves).
No hace falta instalar componentes adicionales en el lado del cliente Tus usuarios finales tendrán que usar Office 2007 o tener instalado el pack de compatiblidad para versiones anteriores.
Fácil / Rápido de desarrollar No, hasta que no tengamos una librerías que nos abstraigan del formato es muy complicado de manejar.
Rendimiento / Rapidez de generación Depende de la implementación que codifiques, pero puede ser muy rápido.
Coste / Licencias No tiene coste adiciones, es un formato abierto.
Problemas con Office 2007 No, ha sido desarrollado para Office 2007.
Compatibilidad con versiones anteriores de Office Los usuarios tendrán que instalar el Office compatiblity pack.
Respeta el layout de las celdas Si.
Admite formato Si.
Soporta formulas Si.
Soporta gráficas Si.
Soporta Macros Si.
Puede alimentarse de una fuente OLAP Si.
Se puede combinar con tecnologías XSL Si, pero no es fácil.

¿ Has decidido que tecnolgoía vas a usar? Para arrancar con tu desarrollado, aquí tienes una selección de artículos sobre estás tecnologías:Selección de artículos sobre generación de ficheros Excel.



Page (1) Of 1