¿Cómo importar clases Java? (macro desde Calc)
Publicado: Mar Mar 27, 2012 12:10 am
Hola!
Estoy intentando hacer una macro a través de la cual pueda generar reportes partiendo de tablas hechas en hojas de cálculo en Calc. La idea es independizarme tanto como sea posible del formato: genero una plantilla con la distribución de "campos" en columnas adecuada, celdas preparadas para recibir "parámetros" de usuario, y luego mando esa información como "entradas" de un generador de reportes, donde ya generé un reporte básico, y cuyo formato no tenga la posibilidad (el usuario final) de cambiar. Como quisiera crear salidas relativamente complejas desde el punto de vista del diseño, decidí utilizar la librería JasperReports (con su editor de plantillas gráfico "iReport", para no enredarme diseñando en XML) que da muchas posibilidades. La idea sería automatizar este proceso, es decir: el usuario final abre un documento nuevo preformatedo con la plantilla, completa los datos anexos (parámetros), la tabla (campos), hace click en un botón "GENERAR REPORTE" (p. ej.) y obtiene una tabla en PDF, siempre con el mismo formato, siempre prolija, sin problemas ocasionados con Ctrl+C y Ctrl+V . De esta manera termina siendo "a prueba de usuarios";). Además el usuario final no necesita instalar ni conocer otro programa que no sea el Calc, y alguna librería extra.
Ahora bien: la librería JasperReports (JR) está desarrollada en Java, lenguaje que lamentablemente no conozco, realmente. Según estuve investigando en foros (y demás) propios de JR, el proceso consta de varios pasos internos: diseñar el layout del reporte en XML, "parsearlo" a un formato propio ".jrxml", compilarlo en un formato propio ".jasper", conectarlo con la base de datos en cuestión, llenar el reporte, compilarlo, consolidarlo, y finalmente exportarlo en el formato deseado. Todos estos pasos se realizan con métodos que vienen incluídos en diferentes clases Java, cuyos archivos ".class" se descargan de la página JR oficial (de todas maneras toda la primera parte me la simplifica el diseñador gráfico, que me entrega un diseño de reporte compilado en .jasper).
Y entonces llegan mis dudas: para interactuar desde mi macro OOo con estas clases Java ¿tengo que usar lenguaje JavaScript para escribirla? ¿O puedo hacerlo aunque esté programanda en Basic? Leí por aquí en el foro que se puede llamar a funciones de Python (que, explicaban, es un lenguaje parecido) desde Basic directamente, aunque no logro hacer la analogía para llamar a clases de Java. ¿Tengo que usar una función de tipo "importClass ()"? ¿O agregando las librerías en las Rutas de Clase (Calc -> Herramientas -> Opciones -> Java -> Rutas de Clase) ya funcionaría directamente? (y en ese caso comenzaría a llamar a sus funciones y objetos directamente) Y respecto de eso: ¿agrego, en este menú, directamente la ruta de un paquete .zip que contenga los archivos .class de las clases que necesito para mi procedimiento? ¿O hay que darles otro tratamiento?
Bueno, espero haber sido lo suficientemente claro, sin haber mareado a nadie con ideas inconexas La verdad es que no estoy muy seguro de por dónde empezar. Seguramente después tendré muchas más dudas cuando intente generar el código en sí , pero al menos ya habré comenzado
Ojalá puedan ayudarme. Muchas Gracias!
Manuel
Estoy intentando hacer una macro a través de la cual pueda generar reportes partiendo de tablas hechas en hojas de cálculo en Calc. La idea es independizarme tanto como sea posible del formato: genero una plantilla con la distribución de "campos" en columnas adecuada, celdas preparadas para recibir "parámetros" de usuario, y luego mando esa información como "entradas" de un generador de reportes, donde ya generé un reporte básico, y cuyo formato no tenga la posibilidad (el usuario final) de cambiar. Como quisiera crear salidas relativamente complejas desde el punto de vista del diseño, decidí utilizar la librería JasperReports (con su editor de plantillas gráfico "iReport", para no enredarme diseñando en XML) que da muchas posibilidades. La idea sería automatizar este proceso, es decir: el usuario final abre un documento nuevo preformatedo con la plantilla, completa los datos anexos (parámetros), la tabla (campos), hace click en un botón "GENERAR REPORTE" (p. ej.) y obtiene una tabla en PDF, siempre con el mismo formato, siempre prolija, sin problemas ocasionados con Ctrl+C y Ctrl+V . De esta manera termina siendo "a prueba de usuarios";). Además el usuario final no necesita instalar ni conocer otro programa que no sea el Calc, y alguna librería extra.
Ahora bien: la librería JasperReports (JR) está desarrollada en Java, lenguaje que lamentablemente no conozco, realmente. Según estuve investigando en foros (y demás) propios de JR, el proceso consta de varios pasos internos: diseñar el layout del reporte en XML, "parsearlo" a un formato propio ".jrxml", compilarlo en un formato propio ".jasper", conectarlo con la base de datos en cuestión, llenar el reporte, compilarlo, consolidarlo, y finalmente exportarlo en el formato deseado. Todos estos pasos se realizan con métodos que vienen incluídos en diferentes clases Java, cuyos archivos ".class" se descargan de la página JR oficial (de todas maneras toda la primera parte me la simplifica el diseñador gráfico, que me entrega un diseño de reporte compilado en .jasper).
Y entonces llegan mis dudas: para interactuar desde mi macro OOo con estas clases Java ¿tengo que usar lenguaje JavaScript para escribirla? ¿O puedo hacerlo aunque esté programanda en Basic? Leí por aquí en el foro que se puede llamar a funciones de Python (que, explicaban, es un lenguaje parecido) desde Basic directamente, aunque no logro hacer la analogía para llamar a clases de Java. ¿Tengo que usar una función de tipo "importClass ()"? ¿O agregando las librerías en las Rutas de Clase (Calc -> Herramientas -> Opciones -> Java -> Rutas de Clase) ya funcionaría directamente? (y en ese caso comenzaría a llamar a sus funciones y objetos directamente) Y respecto de eso: ¿agrego, en este menú, directamente la ruta de un paquete .zip que contenga los archivos .class de las clases que necesito para mi procedimiento? ¿O hay que darles otro tratamiento?
Bueno, espero haber sido lo suficientemente claro, sin haber mareado a nadie con ideas inconexas La verdad es que no estoy muy seguro de por dónde empezar. Seguramente después tendré muchas más dudas cuando intente generar el código en sí , pero al menos ya habré comenzado
Ojalá puedan ayudarme. Muchas Gracias!
Manuel