jueves, 7 de febrero de 2008

Gráficas con rangos variables HSSF - POI

Recientemente comence a utilizar Apache POI para crear archivos de Excel desde Java y me encontre con un problema que podría calificar de trivial pero que me quito algo de tiempo.

Supongamos que queremos crear una gráfica que muestre los valores anuales desde una fecha determinada hasta el día de hoy. La solución puede sonar simple: creamos una gráfica en un archivo y listo, posteriormente escribimos los valores mediante POI en otro archivo tomando como base el primero. Cuando el número de años entre la fecha actual y la de inicio cambia (el tiempo pasa) el problema deja de ser trivial.

La principal razón por la que esto sucede es por el simple hecho de que POI no incluye soporte para gráficas, entonces, no es posible crearla o alterarla de manera directa. La solución que yo encontre es un poco rebuscada pero funciona.


  1. Crear el archivo con la gráfica en Excel con datos de muestra.

  2. Crear un rango nombrado que cuente el numero de valores que pueden cubrir nuestros datos.

    1. En el menú Insert > Name > Define...

    2. En la parte inferior crear una formula para seleccionar el rango:

      =OFFSET(Hoja!$B$1, 1, 0, COUNTA(Hoja!$B:$B) - 1, 1)


      OFFSET selecciona un rango a partir de la celda pasada como primer parametro con el numero de filas indicado (el primer uno), el numero de columnas (el cero), y un alto igual al tercer parametro con un ancho del cuarto parametro.

      COUNTA cuenta las celdas no vacias de el rango pasado como parámetro.



  3. Crear la gráfica hasta el paso donde se seleccionan los datos de origen.

  4. Una vez en este paso dar clic en la pestaña de series

  5. Dentro de la pestaña series cambiar el valor de valores y etiquetas por los nombres definidos previamente

  6. Ahora pueden agregarse datos en la fila por debajo de la ultima con datos y estos se agregaran a la gráfica.

  7. El resto es sencillo con POI