Inicio > java, Programación > Exportar Reportes Gráficos a Excel usando JasperReport

Exportar Reportes Gráficos a Excel usando JasperReport

Anteriormente, había hecho mención de la posibilidad de generar archivos de Excel desde Java usando la librería POI. Sin embargo, al tratar de exportar gráficos ésta tarea me fue imposible de realizar, por esto, me vi en la necesidad de usar las librerías de JasperReport.

Para la exportación de gráficos a Excel, primero, se genera mediante una plantilla generada con la aplicación iReport (versión 1.3.3 para este tutorial), el cual no es más que un generador de plantillas para luego ser usadas en nuestra aplicación.

Para el presente tutorial realizaremos un reporte gráfico de la cantidad de Recomendaciones según su Estado por Tipo de Informe, para esto nuestra tabla estará formada de la siguiente manera.

tut0201_tabla.png

Los primeros dos campos guardan información del tipo de informe, los dos siguientes sobre el estado de la recomendación y el último guarda la cantidad de recomendaciones en sus diferentes estados. Se asemeja a una FactTable empleada en Data warehousing.

Así que antes de mencionar cómo hacemos la exportación empezaremos con la creación de la plantilla.

Creación de la Plantilla

  1. En el iReport seleccionamos Fichero > Nuevo Documento (Ctrl + N) y a continuación establecemos las configuraciones iniciales, como el tipo de hoja, la orientación, los márgenes, etc.

tut0202_property.png

  1. Después de realizar las configuraciones la plantilla nos quedará así.

tut0203_regions.png

 

  1. A continuación, vamos a modificar las bandas existentes en nuestra plantilla, para ello iremos a Ver > Bandas. Una vez allí, vamos a establecer la altura de “title”,”columnHeader”, “detail”, “columnFooter”, “pageFooter”, “lastPageFooter” y “summary” en 0.

tut0204_pageheader.png

A medida que vayamos estableciendo la altura, iremos pulsando el botón Aplicar, si no lo hacemos se perderá el valor de cada Banda.

  1. Luego de definir nuestra conexión (para más información pueden ver el manual de iReport) vamos a definir la consulta que poblará nuestro reporte. Para ello iremos a “Datos > Consulta de Informe” e ingresaremos la sentencia “select * from reporte_grafico”. Aseguremos que el IReport haya recuperado la definición de los campos como se ve a continuación:

tut0205_select.png

 

Luego de recuperado los campos debemos cambiar su tipo. Por defecto iReport considera que los números son de tipo java.math.BigDecimal necesitamos cambiarlos por java.lang.Integer. Para esto vamos a “Ver > Campos de Informe”.

  1. Ahora, vamos a crear un “Grupo” de nombre “Prueba” para ello vamos a “Ver > Grupos de Informe”.

tut0206_addparam.png

En vista de que vamos a mostrar un gráfico por cada tipo de informe vamos a enlazar el grupo con el campo NU_ID_TIPO_INFORME, en iReport las referencias a campos llevan el formato que se aprecia en el gráfico anterior. Tomar en cuenta que ya que no vamos a presentar registros sino un gráfico, no es necesario mostrar la cabecera y por ello la altura tiene por valor 0, mientras que al pie del grupo le hemos puesto el valor de 356. Hecho esto nuestra plantilla quedará de la siguiente manera:

tut0207_pruebafooter.png

  1. Ahora vamos a crear el gráfico para ello pulsamos el botón de Herramientas Gráficas tut0208_icon.png. Luego llevamos el puntero del ratón a la banda “PruebaFooter” y allí arrastramos el cursor a fin de determinar el tamaño de nuestro gráfico, automáticamente, se nos mostrará el siguiente cuadro en el que seleccionaremos el tipo de gráfico a crear.

tut0209_report.png

 

Para nuestro ejemplo seleccionaremos el gráfico de barras 3D y luego pulsaremos OK. La plantilla quedará de la siguiente manera.

tut0210_graphic.png

  1. Sobre la imagen haremos clic con el botón derecho del ratón, seleccionaremos la opción “Propiedades de Diseño” y luego la pestaña “Datos de la Gráfica”. Allí configuraremos los Reajustes de estilo y grupo.

tut0211_propgraphic.png

  1. Luego pasaremos a la pestaña “Detalles” y pulsaremos sobre la opción “Añadir”. Allí estableceremos la información que se mostrará en nuestro gráfico de la siguiente manera.

tut0212_datos.png

 

De esta forma le estamos diciendo al iReport que tome como serie el Estado de la Recomendación (si tomáramos el Tipo de Informe, aparecería un solo gráfico con la información de todos los tipos de informe y sus estados), el ID del estado irá en nuestro eje horizontal y la Cantidad de Recomendaciones determinará la altura de cada una de las barras.

  1. Ya para finalizar nuestra plantilla le agregaremos algunos parámetros (Ver > Parámetros de Informe), en este caso el título así como la información del período los enviaré desde la aplicación. También, un campo que nos mostrará la información del tipo de informe que será obtenido al momento de la consulta. La plantilla nos debe quedar así…

tut0213_final.png

  1. Bien, ahora que tenemos nuestra plantilla vamos a guardar la plantilla con el nombre “ReporteEjemplo.jrxml” en la raíz (C:\). Hemos terminado nuestra plantilla, no olviden probarla desde el mismo iReport para ver si puebla los datos.

A continuación, procederemos a indicar la manera de efectuar la exportación y la integración con nuestra aplicación. Antes que nada asegúrense de contar con las siguientes librerías en vuestra aplicación, si no las tienen pueden copiarlas de las librerías que se encuentran en la carpeta del iReport:

  • jasperreports-1.3.3.jar (o la versión que dispongan)
  • jasperreports-extensiones-1.3.1.jar
  • commons-digester.jar
  • commons-digester-1.7.jar
  • jcommon-1.0.0.jar
  • jfreechart-1.0.0.jar
  • jxl-2.6.jar

Primero, creamos un objeto de tipo HashMap el cual contendrá los valores de los parámetros definidos en nuestra plantilla.

   // se crea un HashMap como objeto que ALMACENARÁ LOS PARÁMETROS
   // que reciba la plantilla del reporte, en vista de que no enviamos
   // parametro alguno, solo se instancia el objeto.
   HashMap params = new HashMap();
   params.put("P_PERIODO",strPeriodo);
   params.put("P_TITULO","RESUMEN SITUACIONAL DE LAS RECOMENDACIONES POR TIPO DE INFORME");

A continuación, instanciamos un objeto de conexión a la base de datos.

   // Se obtiene la conexión que se empleará para poblar el reporte
   con = getFReportesOCI().connectionPool.getConnection();

Luego cargamos la plantilla..

   // Se obtiene la ruta fisica de la plantilla del reporte
   String strRutaPlantilla = “C:/”;
   String reportFile = strRutaPlantilla + "ReporteEjemplo.jrxml";

   // Cargamos la plantilla
   JasperDesign objJasperDesign = JRXmlLoader.load(reportFile);

La compilamos y poblamos la plantilla con los parámetros y le enviamos el objeto de conexión al base de datos.

   // Compilamos la plantilla
   JasperReport objJasperReport =
                     JasperCompileManager.compileReport(objJasperDesign);
   // Poblamos la plantilla con los datos de la BD y parametros
   JasperPrint objJasperPrint =
                       JasperFillManager.fillReport(objJasperReport, params, con);

Finalmente, instanciamos las clases que se encargarán de realizar la exportación y establecemos algunas propiedades

   // Instanciamos la clase exportadora
   JExcelApiExporter xlsExporter = new JExcelApiExporter();
   JRXlsExporter exporterXLS = new JRXlsExporter();

   xlsExporter.setParameter(JRExporterParameter.JASPER_PRINT,
                                         objJasperPrint);
   xlsExporter.setParameter(JRXlsExporterParameter.IS_ONE_PAGE_PER_SHEET,
                                         Boolean.TRUE);
   xlsExporter.setParameter(JRExporterParameter.OUTPUT_FILE_NAME,
                                         “C:/archivo.xls”);

La primera y la última propiedad son obligatorias porque en ellas indicamos de qué tipo es el archivo desde el que hacemos la exportación y cual será el nombre del archivo de salida.

Para finalizar, les presento todo el código, nunca olviden cerrar la conexión luego de realizada la exportación, por ello lo pongo dentro de un “finally”.

// ---- Generando archivo XLS INICIO ---- //
try {

   // se crea un HashMap como objeto que ALMACENARÁ LOS PARÁMETROS
   // que reciba la plantilla del reporte, en vista de que no enviamos
   // parametro alguno, solo se instancia el objeto.
   HashMap params = new HashMap();
   params.put("P_PERIODO",strPeriodo);
   params.put("P_TITULO","RESUMEN SITUACIONAL DE LAS RECOMENDACIONES POR TIPO DE INFORME");
   // Se obtiene la conexión que se empleará para poblar el reporte
   con = getFReportesOCI().connectionPool.getConnection();

   // Se obtiene la ruta fisica de la plantilla del reporte
   String strRutaPlantilla = “C:/”;
   String reportFile = strRutaPlantilla + "ReporteEjemplo.jrxml";

   // Cargamos la plantilla
   JasperDesign objJasperDesign = JRXmlLoader.load(reportFile);
   // Compilamos la plantilla
   JasperReport objJasperReport =
                     JasperCompileManager.compileReport(objJasperDesign);
   // Poblamos la plantilla con los datos de la BD y parametros
   JasperPrint objJasperPrint =
                       JasperFillManager.fillReport(objJasperReport, params, con);
   // Instanciamos la clase exportadora
   JExcelApiExporter xlsExporter = new JExcelApiExporter();
   JRXlsExporter exporterXLS = new JRXlsExporter();

   xlsExporter.setParameter(JRExporterParameter.JASPER_PRINT,
                                         objJasperPrint);
   xlsExporter.setParameter(JRXlsExporterParameter.IS_ONE_PAGE_PER_SHEET,
                                         Boolean.TRUE);
   xlsExporter.setParameter(JRExporterParameter.OUTPUT_FILE_NAME,
                                         “C:/archivo.xls”);

   /* Antes de exportar verificamos que el archivo no exista
    * Crea un objeto File a fin de apuntar a la ruta que vamos a
    * almacenar */
   File objFile = new File(“C:/archivo.xls”);

   // Si el archivo existe...
   if (objFile.exists()) {
      // ...elimina el archivo y la variable apunta a 'null'
      objFile.delete();
      objFile = null;
   }

   // ...exporta!!!!
   xlsExporter.exportReport();

   // la variable flag se pasa a true para indicar que funcionó
   flag = true;
} catch (Exception e) {
   flag = false;
   e.printStackTrace();
   throw new Exception(e);
} finally {
   //pase lo que pase cierra la conexión
   if (con != null) {
      getFReportesOCI().connectionPool.free(con);
   }
}
// ---- Generando archivo XLS FIN ---- //

Ok, no olviden enviarme sus sugerencias, comentarios y/o correcciones para mejorar esta primera versión del tutorial.

About these ads
  1. Miguel
    diciembre 19, 2007 en 10:28 | #1

    Muy bueno el tutorial, pero puedes hacer algo para que se vean las imagenes.
    Gracias

  2. diciembre 20, 2007 en 16:29 | #2

    Ya he corregido las imágenes de este Tutorial :D

  3. diciembre 26, 2007 en 19:07 | #3

    En vista de que vamos a mostrar un gráfico por cada tipo de informe vamos a enlazar el grupo con el campo NU_ID_TIPO_INFORME, en iReport las referencias a campos

  4. Miguel
    enero 3, 2008 en 9:38 | #4

    Gracias al final he conseguido tener algún resultado, eso sí, he tenido que cambiar mi idea inicial de hacerlo desde la jsp directamente a usar un servlet, pero bueno, algo es algo.
    Gracias

  5. karolina
    enero 21, 2008 en 19:51 | #5

    olas una pregunta as studiado en cibertec xq t me haces mui konocido d ahi kualkier cosa agregame xq tngo dudas con respeto s irreports gracias!!!!!!!
    muy bueno la pagina!!!!

    bye

  6. enero 22, 2008 en 10:14 | #6

    bueno, sip, soy ex-alumno de Cibertec :D

  7. Oneiros
    febrero 11, 2008 en 16:26 | #7

    gracias por tu publicacion me ha servido mucho solo esta q lo aplique con spring MVC de igual modo un muy buen trabajo muchas gracias

  8. Mikima
    marzo 4, 2008 en 14:46 | #8

    Gracias por tomarse el tiempo de compartir sus conocimientos con nosotros, el ejemplo también me está funcionando correctamente, Saludos y nuevamente gracias.

  9. marzo 24, 2008 en 17:08 | #9

    HOLA QUE TAL, ME PREGUNTABA TU SABES SI ES POSIBLE ABRIR UN REPORTE DE ESTE TIPO DESDE UN JSP Y TAL COMO SE LO ABRE UN UNA APLICACIÒN NORMAL SE LO PUEDA EXPORTAR A XLS, XML, PDF Y TODAS LAS OPCIONES QUE PERMITE EL JASPERREPORT
    TE AGRADECERÌA MUCHO TU RESPUESTA

  10. Alex
    abril 8, 2008 en 12:19 | #10

    Alguien sabe como modificar el tamaño de los números que se muestran en las barras de los gráficos (Si hemos señalado mostrar etiquetas), que no se oculten y que el ancho de las barras siempre sea del mismo tamaño cuando tenemos varios gráficos en el mismo ireport.

  11. Maria
    abril 23, 2008 en 6:35 | #11

    Alex, tengo tu mismo problema, no hay manera de modificar el tamaño de la etiqueta en un grafico (la etiqueta que aparece dentro de las barritas del grafico)

    ¿Alquien sabe cómo hacerlo?

    Muchisimas gracias

  12. abril 26, 2008 en 23:30 | #12

    oye disculpa me interesa mucho tu tutorial
    se te agredece mucho

    y quisiere que me pases si se pudiera el archivo fuente porfavor

    saludos y gracias

  13. Karol
    mayo 1, 2008 en 11:10 | #13

    Hola esta muy bueno el tutorial pero estoy teniendo problemas con mi gráfico de barras, en mi caso quisiera que en la barra vertical me muestre un numero de año, por ejemplo que inicia en 1980 y concluya en 2008 pero no he podido hacer esto, el gráfico se muestra bien pero no se como cambiar el rango que se muestra en los ejes X y Y

  14. Christopher
    mayo 26, 2008 en 11:42 | #14

    Hola muy buen tutorial, tengo un problema, al realizar el reporte quiero abrir el archivo en la maquina cliente, con un servlet, pero no se actualiza el resource de tomcat, como hago para abrir el reporte desde la maquina client sin tener problemas?

  15. gary prado
    junio 12, 2008 en 12:25 | #15

    Se me tira el programa en la parte de

    JasperDesign objJasperDesign = JRXmlLoader.load(reportFile);
    y ta todo bien por que primero lo pruebo en el ireport y sale el grafico de mill maravillas pero cuando lo hago desde java se tira me dice que no conoce la libreria org.algomas.jfreereport AYUDA PO FAVOR URGENTE..

  16. junio 12, 2008 en 20:04 | #16

    Te haz asegurado de tener todos los jars con los que trabaja el Jasper? En particular, el que corresponde al JFreeChart?

  17. Ruth
    septiembre 24, 2008 en 16:06 | #17

    Hola muy bueno tu tutorial me podrías pasar el código fuente please please

  18. Ruth
    septiembre 24, 2008 en 16:10 | #18

    Me lo podrias mandar e mi correo rubi21_20@hotmail.com por favor

  19. madf
    octubre 29, 2008 en 17:29 | #19

    oye que buen material, por cuestiones del destino yo no puedo generar la plantilla, genere una para reportes sin grafica, cambia mucho una plantilla con garfica? que tanto? podrias postearla?
    esta es la mia, como vez? algo en especial que agregar para generar la grafica?



    <![CDATA[
    query!!!!

  20. madf
    octubre 29, 2008 en 17:31 | #20

    no salio el xml…
    bueno en realidad es uno muy sencillo, solo le paso algunos parametros, formo un query, y precento los resultados, despues genero un pdf

  21. madf
    octubre 30, 2008 en 11:23 | #21

    ya salio, solo que me salen 2 graficas, a que se debera?

    • joel
      mayo 13, 2010 en 12:39 | #22

      mi estimado tengo el mismo problema me salen dos graficas al crear mi excel o mi html, tu pudiste solucionar esto..

  22. Tito Robe
    febrero 16, 2009 en 14:48 | #23

    Hola, baje las librerias del iReport que segun dicen son para trabajar con el net beans, pero no se de que forma se le agregan eseo pluggins al net beans. Agradeceria cualquier sugerencia.. Gracias

    • Luci
      agosto 28, 2009 en 18:06 | #24

      holap puesde agregar los plugins de dos formas la primera ve a tools luego a plugins y en Downloaded y le das Add plugins y alli busca la carpeta donde los tienes y estos deben estar en formado *nbm la otra forma de agregar plugins es por librerias bueno espero te sirva

      • agosto 22, 2010 en 22:57 | #25

        …gracias por la ayuda :)

  23. aion
    septiembre 3, 2009 en 14:07 | #26

    Excelente aporte amigo, tarde dias en saber como exportar un reporte a excel hasta que me tope con esta pagina. SE TE AGREDECE, NO SABES DEL APURO QUE ME ACABAS DE SACAR

  24. orlando
    noviembre 10, 2009 en 12:10 | #27

    Hola como estas, oye he seguido tu tutorial al pie de la letra, solo que he tenido un problema al momento de la exportacion a Excel ya que si me trae la plantilla, no me marca nigun error y me aparecen los parametros que le mando, pero no me aparece la grafica, ya la probe en el ireport y si aparece todo bien pero en el archivo .xls que genera no se la trae, tu codigo lo puse en una jsp no se si eso tenga algo que ver con que no se traiga la imagen y el .jasper y el .jrxml estan en la misma carpeta que mi jsp, espero que me puedas ayudar, te agradezco de antemano!!

  25. gustavo
    diciembre 1, 2009 en 17:33 | #28

    Brother ta chevre tu tuto pero quisiera saber si se podia hacer con eclipse esto?

    • agosto 22, 2010 en 23:00 | #29

      … ciertamente, se puede realizar este tutorial con cualquier ide, es solo cuestión de configurar nuestro proyecto para que haga uso de los jars correspondientes.

  26. Pedro Piña
    enero 12, 2010 en 18:12 | #30

    Gracias por la explicación de JExcelAPIExporter, me salvo de un problema de corrupción de archivos de excel utilizando el exportador de jasper que utiliza POI, ahora todo va de 10.

  27. Mirovita
    enero 19, 2010 en 8:55 | #31

    Buenas tardes, la presente es para saber sipuede exportar un reporte de ireport en xml ( como seria el codigo en java para q el reporte me salga en xml?

  28. Mirovita
    enero 19, 2010 en 8:56 | #32

    Buenas dias, la presente es para saber sipuede exportar un reporte de ireport en xml ( como seria el codigo en java para q el reporte me salga en xml?

    • agosto 22, 2010 en 22:56 | #33

      ciertamente, el formato de cada plantilla viene como jrxml el cual es un xml en sí, a menos que te refieras al resultado del reporte..

  29. Carlos Medina
    agosto 22, 2010 en 11:04 | #34

    holas!!! kisiera saber si hay alguna forma de mostrar estos reporte en la web …… en un jsp!!

    salu2!!!!

    • agosto 22, 2010 en 22:57 | #35

      … tengo entendido que la librería o mejor dicho la aplicación iReport te da la opción para exportar estos informes y mostrarlos en web.

  30. yuri
    enero 23, 2011 en 16:50 | #36

    xvr broth m ayudastes bastante (Y)

  31. gbylmb
    marzo 9, 2012 en 10:40 | #37

    hola me parece muy bien tu tutorial, pero tngu¿o una duda, para que usas el objeto
    “JRXlsExporter exporterXLS = new JRXlsExporter();”

  1. diciembre 20, 2007 en 16:32 | #1

Deja un comentario

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

Seguir

Recibe cada nueva publicación en tu buzón de correo electrónico.

Únete a otros 637 seguidores

%d personas les gusta esto: