Exportar a formato Excel con JSP de forma bien básica (TSV)
19.8.09. Por ooscarr (ooscarr)En este tutorial voy a mostrar la manera de generar un archivo compatible con Microsoft Excel que consiste en valores separados por espacios tabuladores muy elemental y sin gráficos o estilos.
Primero hay que partir diciendo qué opciones de formatos compatibles con Excel hay:
- CSV
- Es el más conocido, y consiste en un archivo de texto plano, generalmente con la extención
.csvdonde los valores de cada celda van separados por una coma (,) en el caso de las columnas, y un salto de línea para las filas. - TSV
- TSV es una variación al anterior CSV, donde las columnas van separadas por un espacio tabulador y las filas por un salto de línea. Esto permite que se puedan introducir celdas con valores que incluyan una coma y no sean confundidas por un salto de columna, por ejemplo.
- XLS
- El formato Microsoft Excel tradicional que es un archivo binario para Windows donde se guardan en hojas, gráficos y macros. Mucho tiempo su especificación fue cerrada, pero desde que se comenzó a documentar el formato con ingeniería inversa y debido a las presiones de las cortes para aceptar su formato como un estándar, Microsoft se vio obligada a publicar su estructura de funcionamiento bien particular.
- XLSX
- Esta es la última especificación Office Open XML que Microsoft no sé cómo logró estandarizar, y que consiste en una serie de archivos XML y otros, organizados en una carpeta todo comprimido en un archivo ZIP (al igual que el estándar OpenDocument que también es soportado por Microsoft Office 2007 pero que no es de propiedad de Microsoft).
Y otros más menos importantes.
El formato
El formato que voy a exportar desde el JSP en este tutorial es el TSV, pero con extensión .xls. El archivo siguiente:
Uno Due Tre Quattro
Uno Dos Tres Cuatro
One Two
Ichi Ni San Shi
Odin Dva Tri
Se vería así en la planilla de cálculo:
| A | B | C | D | |
|---|---|---|---|---|
| 1 | Uno | Due | Tre | Quattro |
| 2 | Uno | Dos | Tres | Cuatro |
| 3 | One | Two | ||
| 4 | Ichi | Ni | San | Shi |
| 5 | Odin | Dva | Tri |
La librería
Yo encontré una librería de etiquetas para generar estos archivos y así evitarme el problema de generar el caracter de tabulación y todos los espacios (whitespaces) que se generan.
Descarga
La página para descargar el archivo exceltag.jar es http://www.servletsuite.com/servlets/exceltag.htm
Instalación
Para instalar la librería en Netbeans, es igual que en todas las librerías. Se va a las propiedades del proyecto,
elegimos Agregar JAR/Carpeta (o Add JAR/Folder); buscamos el archivo exceltag.jar recién descargado y seleccionamos Elegir
.
Aceptar
El modo de uso
Ahora que está la librería instalada, hacemos uso de ella de la siguiente forma:
Hola, mundo
Para el primer ejemplo, voy a crear un nuevo archivo llamado Numberwang.jspx como de costumbre:
Y el código con sintaxis XML sería...
Numberwang.jspx
<?xml version="1.0" encoding="UTF-8"?>
<!--
Document : Numberwang
Created on : 15-ago-2009, 9:58:09
Author : ooscarr
-->
<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page"
xmlns:ms="http://www.servletsuite.com/servlets/exceltag"
version="2.0">
<jsp:directive.page contentType="application/vnd.ms-excel;charset=UTF-8"
pageEncoding="UTF-8"/>
<ms:Excel>
<ms:cell>Uno</ms:cell>
<ms:cell>Due</ms:cell>
<ms:cell>Tre</ms:cell>
<ms:cell>Quattro</ms:cell>
<ms:row/>
<ms:cell>Uno</ms:cell>
<ms:cell>Dos</ms:cell>
<ms:cell>Tres</ms:cell>
<ms:cell>Cuatro</ms:cell>
<ms:row/>
<ms:cell>One</ms:cell>
<ms:cell>Two</ms:cell>
<ms:row/>
<ms:cell>Ichi</ms:cell>
<ms:cell>Ni</ms:cell>
<ms:cell>San</ms:cell>
<ms:cell>Shi</ms:cell>
<ms:row/>
<ms:cell>Odin</ms:cell>
<ms:cell>Dva</ms:cell>
<ms:cell>Tri</ms:cell>
</ms:Excel>
</jsp:root>
Resultado
Cuando visite la página Numberwang.jspx, el navegador reconocerá el contentType="application/vnd.ms-excel;charset=UTF-8" y dará la opción de descargarlo o, en ciertos casos, en Windows, desplegará la planilla de cálculo dentro de la ventana del browser.
Nombre de archivo personalizado
Para elegir otro nombre para el archivo Excel, basta agregar la siguiente línea en el principio del documento:
<jsp:directive.page contentType="application/vnd.ms-excel;charset=UTF-8"
pageEncoding="UTF-8"/>
<jsp:scriptlet>
response.setHeader("Content-Disposition","attachment;filename=nombre_de_archivo.xls");
</jsp:scriptlet>
Otro ejemplo con base de datos
Un último ejemplo que lee los datos de la base de datos, sería:
Productos.jspx
<?xml version="1.0" encoding="UTF-8"?>
<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page"
xmlns:c="http://java.sun.com/jsp/jstl/core"
xmlns:sql="http://java.sun.com/jsp/jstl/sql"
xmlns:ms="http://www.servletsuite.com/servlets/exceltag"
version="2.0">
<jsp:directive.page contentType="application/vnd.ms-excel;charset=UTF-8"
pageEncoding="UTF-8"/>
<jsp:directive.include file="/WEB-INF/jspf/conexion.jspf"/>
<c:catch var="excepcion">
<sql:transaction dataSource="${bdatos}">
<sql:query var="productos">
SELECT nombre_prod AS nombre,precio AS precio FROM inventario_productos;
</sql:query>
</sql:transaction>
</c:catch>
<c:if test="${empty excepcion}">
<!-- Si encontró productos -->
<c:if test="${productos.rowCount>0}">
<!-- Forma la tabla -->
<ms:Excel>
<ms:cell>Producto</ms:cell>
<ms:cell>Precio</ms:cell>
<!-- Llena la tabla -->
<c:forEach items="${productos.rows}" var="producto" varStatus ="status">
<ms:row/>
<ms:cell>${producto.nombre}</ms:cell>
<ms:cell>${producto.precio}</ms:cell>
<!-- En la última fila -->
<c:if test="${status.last}">
<ms:row/>
<ms:cell><c:out value=" "/></ms:cell>
<!-- Se pueden ingresar fórmulas -->
<ms:cell>=SUM(B2:B${status.index+2})</ms:cell>
</c:if>
</c:forEach>
</ms:Excel>
</c:if>
</c:if>
</jsp:root>
Resultado leído de la base de datos
| A | B | |
|---|---|---|
| 1 | Producto | Precio |
| 2 | Lápiz | 200 |
| 3 | Cuaderno | 1000 |
| 4 | 1200 |
¿Qué opinan las aplicaciones de planillas de cálculo?
Cuando se abre el archivo excel generado con una apliación de planillas de cálculo, estos son algunos de los resultados:
| Software | Resultado |
|---|---|
| Microsoft Office | No dice nada y abre el archivo correctamente. |
| OpenOffice.org | Aparece un asistente de importación con una vista previa y si no se modifica ninguna opción, abre la planilla correctamente. |
| iWork Numbers | Aparece un pequeño aviso de que no es un formato Excel válido, pero lo muestra correctamente. |
| Google Docs | Produce un error. A la fecha, no está preparado para el formato. |


0 comentarios (RSS
) :
Referencias a este artículo:
Página principal