[RESUELTO] Programación simplificada en OOo/LibO

Discute el uso de extensiones desarrolladas por terceros dentro de Apache OpenOffice
Responder
Avatar de Usuario
mauricio
Mensajes: 6093
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX
Contactar:

[RESUELTO] Programación simplificada en OOo/LibO

Mensaje por mauricio »

Hola a todos...

Tal como lo hemos prometido aquí: http://user.services.openoffice.org/es/ ... =50&t=6479 tenemos la versión 0.0.1 de la extensión para simplificar un poco, las a veces, largas líneas que se requieren para programar macros en OOo/LibO...

Si instalaron la versión de pruebas del artículo en cuestión, tienen que desintalarla antes para poder instalar esta nueva:
Ultima Edición: 13-Abril-2012
UniversoLibreUtil.oxt.7z
(9.75 KiB) Descargado 336 veces
Para probarla, usen la siguiente macro:

Código: Seleccionar todo

Option Explicit

Sub Main
Dim oUtil As Object
Dim oDoc As Object

	oUtil = createUnoService("com.universolibre.util.UniversoLibreUtil")

	oDoc = oUtil.getComponent("")

	MsgBox oDoc.Title

	oDoc = oUtil.newDoc(0)

End Sub
Para esta primer versión, tenemos dos métodos, el primero se llama getComponent y si le pasas una cadena vacía, te devolverá el componente activo, algo así como ThisComponent, pero con la diferencia de que incluso te puede devolver el entorno IDE si lo ejecutas desde ahí, si le pasas el nombre de un archivo, lo buscará entre los componentes abiertos y te lo devolvera, toma nota que tienes que pasarle el título del documento, exactamente como se ve en pantalla para que te lo devuelva correctamente.

con el segundo método se puede notar un poco más la comparación entre el método normal de crear una nueva hoja de calculo:

Código: Seleccionar todo

oDoc = StarDesktop.loadComponentFromURL("private:factory/scalc", "_blank", 0, Array())
y nuestro método:

Código: Seleccionar todo

oDoc = oUtil.newDoc(0)
ademas de que puedes crear también otros tipos de documentos:

Código: Seleccionar todo

          scalc = 0
           swriter = 1
           simpress = 2
           sdraw = 3
           smath = 4
Su tarea, si deciden aceptarla, es probarla en sus entornos de trabajo y comprobar que funciona como debe ser...

Con cada actualización le ire agregando los métodos más repetidos y tediosos para simplificarlos, lo interesante de esto, es que podemos llamar a nuestros métodos desde cualquier lenguaje de script que soporte OOo/LibO (Basic, Python, JavaScript, BeanShell) o desde lenguajes externos como VB, VB.net, etc...

Pueden ir pensando en esas largas líneas que tanto les cuestan, para ver como las podemos simplificar.

Un abrazo a todos...
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
RMG
Mensajes: 3883
Registrado: Mar Nov 17, 2009 6:59 am
Ubicación: Valencia - España

Re: Programación simplificada en OOo/LibO

Mensaje por RMG »

Hola Mauricio, lo he probado en AOO 3.3 y Win7, con estas incidencias.

Despues de desinstalar la otra versión e instalar la nueva, me ha saltado el error de la imagen, aunque si la ha instalado pero no funcionaba la macro, daba el error "Variable de objeto no establecida". He desisntalado esta nueva versión y la he vuelto a instalar y en este nuevo intento ya no ha dado el error anterior, aunque al ejecutar la macro me ha salido el mensaje de error al ejecutar uno.exe, he cerrado el programa lo he vuelto a abrir, a partir de ese momento parece que si que funciona, pero no como entiendo en tu comeentario que deberia hacerlo, es decir cuendo ejecuto la macro no devuelve el documento actual, si no que devuelve Sin titulo 1 y a continuacion abre un documento nuevo de Cal (0), he probado con los otros números y los abre según tu indicas. Pero como te digo no me muestra el documento activo, igual es que estoy entendiendo mal lo que explicas.

Un abrazo
Adjuntos
Captura.JPG
Captura.JPG (55.2 KiB) Visto 10577 veces
OpenOffice 4.1.15 y LibreOffice 6.2.4.2 en W-10, y LibreOffice 4.1.6.2 en Open Suse 13.1(VirtualBox)
Avatar de Usuario
SLV-es
Mensajes: 4894
Registrado: Jue Ago 26, 2010 1:25 am
Ubicación: España
Contactar:

Re: Programación simplificada en OOo/LibO

Mensaje por SLV-es »

OOo 3.3.0 corriendo bajo Windows Vista Bussines SP2: ha funcionado perfectamente.

Felicidades por tu magnífica idea y por materializarla, Mauricio.
+info en la web "no oficial" dedicada a OpenOffice en Español
AOO 4.1.2 y LibO 4.4.6 en W10 y en Lliurex
No respondo mensajes privados sobre AOO, por favor, utiliza el foro para tus preguntas
Avatar de Usuario
mauricio
Mensajes: 6093
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX
Contactar:

Re: Programación simplificada en OOo/LibO

Mensaje por mauricio »

Hola...

Ramon, la pantalla de error que muestras sale cuando aun no has desinstalado la anterior, normalmente... si ejecutas la macro directamente desde el IDE, es será el documento activo, prueba a ejecutar la macro, teniendo activo cualquier otro documento, probare con tu entorno de trabajo...
EDICION: Te cuento Ramón que en un equipo virtual con W7 y AOO 3.3, da los errores que mencionas, probé con la beta de AOO 3.4 y funciono sin problemas...

Gracias Salva por tu prueba y comentarios...

Creo que pondré como versión mínima a usar AOO/LibO 3.4... ¿que opinan?

Abrazos a ambos...
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
Avatar de Usuario
SLV-es
Mensajes: 4894
Registrado: Jue Ago 26, 2010 1:25 am
Ubicación: España
Contactar:

Re: Programación simplificada en OOo/LibO

Mensaje por SLV-es »

Nueva prueba en equipo virtual: AOO 3.4 Beta build 9590 bajo Windows XP Profesional SP3

Ha funcionado correctamente.
+info en la web "no oficial" dedicada a OpenOffice en Español
AOO 4.1.2 y LibO 4.4.6 en W10 y en Lliurex
No respondo mensajes privados sobre AOO, por favor, utiliza el foro para tus preguntas
mriosv
Mensajes: 2365
Registrado: Sab Dic 27, 2008 1:12 am
Ubicación: Galiza (España)

Re: Programación simplificada en OOo/LibO

Mensaje por mriosv »

Hola a todos.
Win7x64 Ultimate con LIbreOffice 3.5.2.

Como comenta RMG después de desinstalar la anterior, si instalas sin cerrar el programa da error en la instalación.
Después de instalar si no cierras el programa da error de ejecución.
Al final después cerrar con la extensión instalada y volver abrir.
Al ejecutarla sale el cuadro con el texto: "Untitle 1" [OK]

Fantástico Mauricio, aunque no se lo que tienes en la maleta, creo no equivocarme pensando que el potencial detrás de la extensión es prometedor.
Miguel Ángel
Puedes usar "Subir adjunto" en Respuesta rápida - Editor Completo - Pestaña Subir adjunto
Apache OpenOffice 4, LibreOffice (Win10x64)
RMG
Mensajes: 3883
Registrado: Mar Nov 17, 2009 6:59 am
Ubicación: Valencia - España

Re: Programación simplificada en OOo/LibO

Mensaje por RMG »

Mauricio si tu decisión es a partir de 3.4 me parece correcta, pero mi opinión (un poco partidista) es que se pudiera hacer a partir de 3.3, sobre todo por el problema que comento en este enlace.
http://user.services.openoffice.org/es/ ... =67&t=6527

Como bien dice Miguel, creo que lo que estas haciendo para lo que programamos (más bien copiamos) y no tenemos ni idea del ingles, nos abres un mundo de posibilidades. Asi que gracias por todo.

Un abrazo
Ramón
OpenOffice 4.1.15 y LibreOffice 6.2.4.2 en W-10, y LibreOffice 4.1.6.2 en Open Suse 13.1(VirtualBox)
Avatar de Usuario
mauricio
Mensajes: 6093
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX
Contactar:

Re: Programación simplificada en OOo/LibO

Mensaje por mauricio »

Hola Ramon... no tendría problema que fuera desde 3.3 siempre y cuando funcione, desconozco (no tengo tiempo de investigar) por qué da ese error en Win con AOO3.3, así que si alguien lo encuentra con gusto lo arreglo, pero mientras, aclararé que funciona correctamente desde 3.4 en adelante...

Saludos

P.D. Respecto al problema de los reportes, también tengo en mente analizarlo... en cuanto tenga tiempo, jejej
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
xiseme
Mensajes: 1918
Registrado: Lun Nov 24, 2008 1:13 pm

Re: Programación simplificada en OOo/LibO

Mensaje por xiseme »

En mi caso también funciona con LibO 3.3.4
Adjuntos
PruebaULU.ods
(12.14 KiB) Descargado 314 veces
Todo es mejorable, estamos dispuestos a mejorar. ¿Yo? ... poco a poco.
Nunca hay acritud en mis comentarios, si lo pareciera, seguro que me he expresado mal.
RMG
Mensajes: 3883
Registrado: Mar Nov 17, 2009 6:59 am
Ubicación: Valencia - España

Re: Programación simplificada en OOo/LibO

Mensaje por RMG »

Hola Mauricio,

He estado haciendo pruebas con el archivo de xiseme y funciona perfectamente, despues he creado uno nuevo y tampoco he tenido ningún problema, por lo que te confirmo que en 3.3 ahora funciona OK.

Que alegria para mi cuerpo...

Un abrazo
OpenOffice 4.1.15 y LibreOffice 6.2.4.2 en W-10, y LibreOffice 4.1.6.2 en Open Suse 13.1(VirtualBox)
Avatar de Usuario
mauricio
Mensajes: 6093
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX
Contactar:

Re: Programación simplificada en OOo/LibO

Mensaje por mauricio »

Hola a todos...

Tenemos nuevos métodos en la extensión.

Podemos crear una nueva base de datos, solo tienen que pasar la ruta completa donde quedará, el método solo devuelve verdadero (True) si la creo correctamente y falso si no.

Código: Seleccionar todo

oUtil.newDB("/home/mau/pruebas.odb")
Podemos verificar si un documento es del tipo correcto, por ejemplo, si es una hoja de calculo:

Código: Seleccionar todo

oUtil.isTypeDoc(ThisComponent,0)
'Para los demás tipos
            scalc = 0
            swriter = 1
            simpress = 2
            sdraw = 3
            smath = 4
            sbase = 5
            Basic IDE = 6
Podemos obtener la ruta temporal escribible, muy util para procesos temporales.

Código: Seleccionar todo

'Cuidado hay que pasarle una cadena vacia
MsgBox oUtil.getPathTemp("")
'Si le pasas el nombre de un archivo, te devuelve la ruta temporal más este archivo
MsgBox oUtil.getPathTemp("temp.txt")
Podemos devolver la ruta actual de documentos del usuario

Código: Seleccionar todo

MsgBox oUtil.getPathUser()
Podemos solicitar la selección de un directorio al usuario, pasandole el directorio inicial donde queremos que empiece

Código: Seleccionar todo

sDir = oUti.getFolder("/home/mau")
Y una muy interesante y poderosa, podemos obtener en una matriz, todos los archivos, incluyendo sus subdirectorios, de un determinado tipo de archivo, por ejemplo, todos los de Calc, "cuidado", el código siguiente podría devolverte una matriz enorme.

Código: Seleccionar todo

Dim mArchivos()

mArchivos = oUtil.getFiles("/home/mau","*.ods")
Los siguiente métodos, nos van a servir para depurar nuestras macros cuando algo no salga bien.

El método msgbox tiene la particularidad de poderle pasar "casi" cualquier cosa, no solo cadenas de texto, por ejemplo objetos o matrices.

Código: Seleccionar todo

oUtil.msgbox(ThisComponent)
El método debug nos creara un archivo con los datos y el nombre pasado, si el nombre del archivo esta vacío, crea un archivo debug.txt en la carpeta del usuario, si le pasas una ruta completa, entonces la crea en dicha ruta.

Código: Seleccionar todo

'Esto se creara en la ruta del usuario con el nombre debug.txt
oUtil.debug("Registro de error","")
'Esto se creara en la ruta especificada
oUtil.debug("Otro registro de error","/home/mau/extensiones/pruebas/registro.txt")
Y la joya de la corona, la extensión MRI es una extensión que hace introspección en cualquier objeto del API de AOO/LibO, es una maravilla esta extensión: https://github.com/downloads/hanya/MRI/MRI-1.1.2.oxt
Después de instalarla, podemos llamar a esta extensión desde la nuestra.

Código: Seleccionar todo

oUtil.mri(ThisComponent)
Por ahora es todo, los invito a probar y reportar fallas, errores, omisiones, mejoras y listas de deseos...

Creo que este proyecto se esta ganando su propio espacio.

Un abrazo a todos.
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
RMG
Mensajes: 3883
Registrado: Mar Nov 17, 2009 6:59 am
Ubicación: Valencia - España

Re: Programación simplificada en OOo/LibO

Mensaje por RMG »

Hola Mauricio,

He probado en 3.3 y funciona todo bien a excepción de

sDir = oUti.getFolder("D:\"), que si que abre el cuadro de dialogo para seleccionar una carpeta, pero al seleccionarla me da el error "No hay acceso al objeto. Uso no valido del objeto".

Tambien me ha dado el mismo error que anteriormente al instalar la nueva extension, pero la he desinstalado e instalado de nuevo y a funcionar bien.

Saludos
OpenOffice 4.1.15 y LibreOffice 6.2.4.2 en W-10, y LibreOffice 4.1.6.2 en Open Suse 13.1(VirtualBox)
Avatar de Usuario
mauricio
Mensajes: 6093
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX
Contactar:

Re: Programación simplificada en OOo/LibO

Mensaje por mauricio »

Hola Ramón...

¿Este error te lo da en Windows o en Linux?
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
RMG
Mensajes: 3883
Registrado: Mar Nov 17, 2009 6:59 am
Ubicación: Valencia - España

Re: Programación simplificada en OOo/LibO

Mensaje por RMG »

En Win, en Linux no lo he probado.
OpenOffice 4.1.15 y LibreOffice 6.2.4.2 en W-10, y LibreOffice 4.1.6.2 en Open Suse 13.1(VirtualBox)
Responder