Página 1 de 1

¿Cómo importar clases Java? (macro desde Calc)

Publicado: Mar Mar 27, 2012 12:10 am
por mdelvalle
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 :super: . 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í :knock: , pero al menos ya habré comenzado ;)

Ojalá puedan ayudarme. Muchas Gracias!

Manuel

Re: ¿Cómo importar clases Java? (macro desde Calc)

Publicado: Mar Mar 27, 2012 12:38 am
por mauricio
La respuesta rápida es si, puedes usar estas librerías dentro de macros, usando el mismo Java incluso, lo he visto, pero no se hacerlo con Java, yo se hacerlo con Python... si no necesitas toda esa complejidad, puedes usar la misma hoja de calculo para obtener reportes muy profesionales, y solo es cuestión de nombrar celdas con nombre... sugiero explorar primero esta opción...

Saludos

Re: ¿Cómo importar clases Java? (macro desde Calc)

Publicado: Mar Mar 27, 2012 12:43 am
por mriosv
En este enlace creo que puedes encontrar lo que necesitas. Un magnifico libro de Mauricio sobre la programación en Basic de OOo.
http://user.services.openoffice.org/es/ ... =50&t=1545

De cualquier forma, si me permites, creo deberías estudiar las distintas opciones que puedas tener para obtener los informes.

- Quizás sería mas fácil desarrollar las macros para imprimir los informes desde hojas ocultas al usuario y protegidas, en el foro hay ejemplos recientes de imprimir hojas en pdf con macros.

- Las hojas de cálculo se pueden registrar como bases de datos en Base y ahí puedes diseñar consultas para seleccionar registro y diseñar informes de salida, a lo que te puede ayudar la extensión de generación de informes: http://extensions.services.openoffice.o ... portdesign. Y evitarás la necesidad de ficheros externos para guardar los formatos de los informes.

- Creo que además te será mas fácil encontrar apoyo, en el foro creo puedes encontrar ejemplos de informes en Base, y será mas sencillo para un tercero retomarlo en caso de que hiciese falta.

De cualquier forma si tienes ganas de bucear, suerte, el mar está ahí para cuando nos apetece.

Re: ¿Cómo importar clases Java? (macro desde Calc)

Publicado: Mar Mar 27, 2012 12:44 am
por mriosv
Hola Mauricio, mientras escribías yo estaba a lo mismo, parece que nos hemos leído el pensamiento.
Saludos.

Re: ¿Cómo importar clases Java? (macro desde Calc)

Publicado: Mar Mar 27, 2012 1:00 am
por mauricio
Así es mi amigo Miguel... yo optaría por alguna de las opciones que propones, de todos modos si el compañero quiere probar, la siguiente extensión incluye librerías de terceros, ahí puede aprender como integrarlas en una macro, pero si no has hecho macros ni extensiones, prepárate, el camino no es tan terso... menos con java...

http://extensions.services.openoffice.o ... ect/ooo2gd

Saludos

Re: ¿Cómo importar clases Java? (macro desde Calc)

Publicado: Mar Mar 27, 2012 3:22 pm
por mdelvalle
Buenas, Mauricio y Miguel! Primero quisiera agradecerles sus respuestas, y por tomarse el tiempo para considerar posibles soluciones a mi problema. Me vienen muy bien sus consejos respecto de cómo encarar el problema inicialmente, la verdad es que cuanto más "comienzo a bucear", como decía Miguel, más me doy cuenta que el mar es MUY profundo ;) . Puede ser que esté buscando una solución demasiado "sofisticada" para lo que son los requerimientos del trabajo que quiero hacer, y me da la sensación de que podría llevarme AÑOS desarrollar las habilidades necesarias para llevarla a cabo.
Lo cierto es que he intentado anteriormente diseñar templates en el mismo Calc, pero no he logrado buenos resultados. Generalmente, debido a manipulación del usuario, los diseños se "rompen". No se me había ocurrido la solución que propone Miguel, de generar en una hoja los "campos a completar por el usuario", y el diseño "visual" en otra, protegida y/o oculta. Ese método podría funcionar suficientemente bien, y seguro es mucho más sencillo. :oops:
De todas maneras, un programa como Calc, pensado para desarrollar hojas de cálculo, presenta naturalmente algunas limitaciones respecto del diseño visual de un reporte. Es difícil que yo pueda generar un template complejo como el que podría generar en un programa pensado para diseño gráfico (llámese Scribus, Corel, Publisher, etc.). Por eso estuve evaluando alternativas y encontré el iReport, que me pareció que reunía las condiciones necesarias: es capaz de generar reportes gráficamente complejos, de conectarse a diferentes orígenes de datos, y el editor gráfico es muy intuitivo y preciso. Y es OpenSource. :super:
Ingenuamente, pensé que como básicamente funciona sobre un paquete de librerías Java, sería un procedimiento relativamente sencillo "llamarlas" desde Basic y utilizar los métodos que tienen ya definidos "adentro". Y que si investigaba un poco iba a lograr hacerlo funcionar. Pero sabiendo que ustedes, que tienen INFINITAMENTE más experiencia que yo en este tema, lo consideran un método al menos complicado, bueno..ejem..quizás tendría que ir pensando en buscar una solución más a mi alcance, digamos. ¡Ojo! Eso no quita que ya haya descargado el manual de Mauricio y esté comenzando a dar mis primeros pasitos con BASIC. Pero seguramente tendré que dejar este problema y centrarme en otros más terrenales, por el momento.
Mauricio: estuve intentando extraer conclusiones husmeando el código de la extensión que referenciaste en tu respuesta, pero la verdad es que no logro nada concreto. Incluso hay un texto donde describe, muy brevemente, el procedimiento para referencias rutas de clases y, hasta donde logro entender, es similar a lo que estoy intentando hacer. El problema es que, cuando de aparatos determinísticos se trata, "similar" y "distinto" son cosas demasiado cercanas, ¿no? :roll:
Bueno, espero sus comentarios. Seguramente vendré mucho más seguido al foro, aunque posiblemente las dudas de novato que me surjan a partir de ahora :crazy: estarán ya preguntadas y respondidas, con lo cual mis visitas serán mayormente para leer, y no tanto para preguntar, por el momento.
Muchas gracias y saludos,

Manuel

PD: si intentando alguna de las soluciones simplificadas que me proponen me surgen dudas (que intuyo lo más probable) y no encuentro las respuestas, ¿sigo preguntando por este hilo? ¿o este queda cerrado y abro uno nuevo? (teniendo en cuenta que las posibles soluciones serían para "reemplazar" el método que generó las dudas, y el hilo, en primer lugar)

Re: ¿Cómo importar clases Java? (macro desde Calc)

Publicado: Mar Mar 27, 2012 3:28 pm
por RGB-es
mdelvalle escribió:PD: si intentando alguna de las soluciones simplificadas que me proponen me surgen dudas (que intuyo lo más probable) y no encuentro las respuestas, ¿sigo preguntando por este hilo? ¿o este queda cerrado y abro uno nuevo? (teniendo en cuenta que las posibles soluciones serían para "reemplazar" el método que generó las dudas, y el hilo, en primer lugar)
Como puedes ver en la Guía de supervivencia, la regla general es «un hilo, una pregunta», por lo que a menos que sea una continuación directa del tema aquí tratado, es mejor abrir un hilo nuevo ;)

Saludos