martes, 16 de abril de 2024

DATOS. Textos

OOo Basic. DocAp

DocAp basado en macros

La primera y más básica forma de crear un DocAp (1) es utilizando el código resultante de utilizar la funcionalidad Grabar macro (2).

Técnicamente existen diferencias importantes entre esta funcionalidad y la programación con los llamados lenguajes de macros (vg. OOo Basic), empezando por una diferencia no menor, como es que la primera no exige acceder al IDE del servicio (3), con lo que es perfectamete posible que quien se limita a generar macros no conozca el funcionamiento y utilidad de dicho servicio (el IDE) ni tenga por qué saber nada del lenguaje de programación que subyace. No obstante, esta es una posibilidad más teórica que real, ya que podemos decir que "lo uno lleva a lo otro".

Dicho lo anterior, por concretar y no repetir aquí lo ya explicado en otras entradas, me limitaré a exponer de forma resumida la creación de un DocAp partiendo del uso de macros, considerando ya conocido el procedimiento para crear un docap a partir de una única macro, así como el método de trabajo modular.

  • Una vez analizada la secuencia de acciones que necesitamos para el docap y creadas las macros individuales necesarias, creo el script gestor desde el que se llama (Call) a cada una de las macros en el orden y momento en que las necesitamos para completar el proceso.
  • Bien en cada una de las macros individuales, bien desde un script específico, se declaran las variables de datos y se utilizan los procedimientos para la interacción con el usuario (interfaz), a fin de posibilitar la entrada de datos.
  • La forma más simple de hacerlo es que el usuario acceda al IDE y realice directamente la asignación, sin emplear ningún recurso interface específico. Esta forma tiene la ventaja de hacer innecesaria cualquier sistema de interface, pero también exige un mayor grado de conocimiento del lenguaje de programación por su parte y como procedimiento puede resultar un tanto engorroso.
  • Una alternativa relativamente simple a lo anterior es proporcionar al usuario acceso a las variables mediante una función InputBox(). Este docap es ejemplo de esta segunda opción.
  • Al inicio del script gestor debemos llamar necesariamente al script en el que se asignan los objetos necesarios para el funcionamiento de las macro: las variables de tipo objeto deben haber sido declaras al inicio del código, fuera de cualquier macro y la asignación se realiza en un script específico:


dim document as object
dim dispatcher as object

Sub VarSis
	document = ThisComponent.CurrentController.Frame
	dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
End Sub


El proceso que sigo para crear un DocAp basado en el uso modular de macros simples está descrito con detalle en esta lista de You Tube

Nota:
1 Realmente y en sentido estricito no podríamos hablar (aun( de DocAp, ya aun nos situamos dentro del ámbito de las utilidades de servio ofimático, pero dada la contigüedad que existe entre este código y el resultante del uso de los lenguajes de programación (vg. OOo Basic) podemos incluir estas formas de trabajo y lo que de ellas resulta dentro del concepto de DocAp.
2 Utilizo aquí el término "macro" en sentido restringido, esto es, como código que resulta de usar la funcionalidad Grabar macro a la que accede desde esta ruta de menús Herramientas | Macros | Grabar macro. Si por algún motivo esta funcionalidad no estuviera activada, para tenerla disponible (se aconseja) se procederá como sigue: Herramientas | Opciones | LibreOffice | Avanzado y en el menú emergente activar la casilla Activar grabación de macros (limitada)
3 En realidad, esta afirmación no es del todo exacta, aunque sí pertinente por las diferencias que se explican también en esta entrada. En todo caso, si no hemos creado previamente un módulo dentro del documento (que es lo que cabe esperar), al intentar grabar la macro nos exigirá realizar este proceso. Para ello se accede automáticamente al IDE y nos obliga a crear un módulo nuevo. Para hacerlo correctamente deberemos tener decidido en qué directorio lo vamos a crear, siendo recomendable (en este momento) hacerlo sobre la "carpeta" Standard del documento con el que estamos trabajando. Por defecto, el sistema crea un módulo llamado Module1, que podremos renombrar.

No hay comentarios:

Publicar un comentario

Comenta esta entrada