logotipo de el mundo de deckerix
El mundo de deckerix
mascotas
El mundo de deckerix. [x]
logotipo de el mundo de deckerix

El mundo de Deckerix 0.4


by Oscar Carrascosa Blanco


Deprecated: Function split() is deprecated in /homepages/43/d272195232/htdocs/src/utiles/Fecha.php on line 65

Deprecated: Function split() is deprecated in /homepages/43/d272195232/htdocs/src/utiles/Fecha.php on line 66
Septiembre 28 2008 11:21:51

Generar Hojas de Excel al vuelo con POI by deckerix

Para generar una hoja de Excel desde una página web, podemos utilizar el truco de generar una tabla HTML y decirle al navegador que el ContentType de la página que estamos creando es del tipo application/vnd.ms-excel. Esto nos resuelve casi el 99% de las generaciones de hojas de calculos.

En algunos proyectos he tenido que generar hojas de cálculos al vuelo, en un formato mucho más presentable, ya que la anterior solución no nos permite mucha capacidad de maniobra, en cuanto a estilos y formato de presentación de las mismas.

Una de las soluciones que encontré a este problema fue la librería POI. Para poder utilizarla será necesario descargarse los Jars correspondientes desde la web de Apache POI.

Cada fichero de una hoja de cálculo representa un LIBRO. En un LIBRO podemos tener varias HOJAS, dentro de cada HOJA tener varias FILAS, y, finalmente, en cada FILA varias CELDAS.

Es posible generar una hoja de calculo desde cero, y escribirla a un fichero. En mi caso lo que haré será partir de una hoja de cálculo ya generada (guardada en mi sistema de ficheros), rellenarla con información desde la base de datos.

Voy a generar una hoja de cálculo con información de varias empresas en JSP. En primer lugar necesito generar un LIBRO a partir de una hoja de cálculo existente y obtener una hoja donde empezar a trabajar:

	
    POIFSFileSystem df           = new POIFSFileSystem(new FileInputStream("C:\\www\\informes\\listadoEmpresas.xls"));
    /*Generamos un libro de trabajo a partir de mi plantilla*/
    HSSFWorkbook    libroTrabajo = new HSSFWorkbook(df);
    /*Obtenemos la primera hoja del libro de trabajo*/
    HSSFSheet       hoja         = libroTrabajo.getSheetAt(0);

Una vez que tenemos la hoja donde empezar a trabajar, procederemos a rellenarla con los datos de las empresas obtenidos. Crearé una fila por cada una de ellas, y tantas celdas como datos tenga.

	int i=0;
	/*Recorro el cursor de empresas*/
    while (resultado!=null && resultado.next()){

	  /*Obtengo una fila de la hoja*/
      HSSFRow             fila  =  hoja.getRow(i);
      /*Si la hoja no tiene esa fila, la creo*/
      if (fila == null)   fila  =  hoja.createRow((short)i);

	  /*Obtengo una celda de la fila*/
      HSSFCell celda =  fila.getCell((short)0);
      /*Si no existe la creo*/
      if (celda == null)  celda =  fila.createCell((short)0);
      /*Indico el tipo de la fila, en este caso numerico*/
      /*Existen más tipos, HSSFCell.CELL_TYPE_STRING...*/
      celda.setCellType(HSSFCell.CELL_TYPE_NUMERIC);
	  /*Introduzco un valor en la celda*/
      celda.setCellValue(resultado.getString("identificador"));
    ...

Ya tenemos casi todo hecho. Solamente nos queda cerrar la hoja de cálculo:

   libroTrabajo.write(response.getOutputStream());

Aquí os podeis descargar el código completo.

Nombre * (obligatorio)

Email

Web

El mundo de Deckerix es una creación de Óscar Carrascosa Blanco.

deckerix@gmail.com