Macros y lenguaje OpenOffice.org Basic

En esta sección, que esperamos merezca un gran interés, iremos agregando las recetas relativas a la automatización de OpenOffice.org, mediante macros y lenguaje Basic

Documentación en español sobre macros en OpenOffice.org

De forma recurrente, y cada vez con mayor interés, se solicita información para automatizar tareas en OpenOffice.org. Iré añadiendo en esta página los enlaces a manuales y recursos que puedan servir para dar nuestros primeros pasos.

  • Aprendiendo OOoBasic del mexicano Mauricio Baeza es un excelente tutorial de aprendizaje de programación, comenzando por el lenguaje Basic en sí, para continuar con su aplicación al control de los documentos de OpenOffice.org.  Aunque aún no está finalizado, es lo mejor y más didáctico que puede encontrar un principiante.  Además del enlace del título de este apartado, lo podéis descargar directamente del enlace del adjunto al pie de este artículo, así como el archivo con ejemplos .  Te recomiendo inscribirte en la lista de correo del autor para intercambiar experiencias y efectuar consultas durante tu aprendizaje.
  • Información importante sobre macros para OpenOffice de Andrew Pitonyak, traducido del inglés por Arturo Garro. Un documento (168 pags.) imprescindible para cualquier estudioso del uso de lenguaje Basic para programación de macros en OpenOffice.org. Abundantes ejemplos de macros sofisticadas y útiles para depuración.
  • Introducción a OpenOffice.org Basic del brasileño Noelson Alves Duarte, traducido del portugués por un servidor. Un manual (85 pags.) introductorio de nivel básico que va avanzando paso a paso en la gestión y automatización de los documentos de OpenOffice.org mediante programación de macros. Para cualquier castellano-parlante, puede ser muy buen comienzo antes de introducirse en la esotérica y críptica documentación de la API de OpenOffice.org.
  • StarOffice 6.0 - Guía básica del programador de Sun Microsystems, traducido por Arturo Garro. Este documento (204 pags.) no tiene una orientación demasiado didáctica, pero puede ser un buen manual de referencia para complementar algunos de los tópicos no cubiertos por las obras citadas anteriormente.

Además de las citadas, encontraréis diversos ejemplos en la sección de documentación del proyecto de OpenOffice.org en lengua española. Otros sitios muy interesantes al respecto:

Si conocéis algún otro recurso que he omitido, escribid un comentario con el enlace y lo añadiré a la página.

AdjuntoTamaño
Aprendiendo_OOoBasic.odt7.02 MB
Aprendiendo_ejemplos.zip689.49 KB

Incremento automático del contenido de una celda en una tabla de texto

Esta pequeña macro ha sido inspirada por Joan Martinez Seres (Linux BCN), en un mensaje a la lista de correo de Badopi en el que solicitaba la manera de crear una plantilla para facturas en OpenOffice.org que incrementase automáticamente el número de factura.

De paso, me ha servido para repasar un poco eso de las macros en el Basic de OpenOffice.org, que tengo muy olvidadas a causa de mi falta de tiempo.

El documento autoincremento.odt con la macro creada puedes descargarla al pie del artículo donde aparece como anexo

Creación de la tabla

He optado por crear una tabla a la que he denominado encabezado, en cuya celda B3 (columna 2, fila 3) he ubicado el número de factura. Pasos seguidos:

  • en menú Insertar -> Tabla:
    • Nombre: encabezado
    • Filas: 4
    • Columnas: 2
  • Combinar las dos celdas de la fila 1
  • Escribir contenido.

La apariencia final de la tabla:

fralinuxbcn


Código de la macro

La forma de abordar la tarea ha sido crear una macro que obtenga el contenido de esa celda y lo incremente. Éste es el código:

Sub incrementa

Dim oTablas As Object
Dim oTabla As Object
Dim oCelda As Object
Dim numfra As String

' localiza celda
oTablas = ThisComponent.getTextTables()
oTabla = oTablas.getByName("encabezado")
oCelda = oTabla.getCellByName("B3")

' obtiene numfra
numfra = oCelda.getString

' incrementa numfra
numfra = str$(val(numfra) + 1)

' escribe numfra
oCelda.setString(numfra)

End Sub

Pasos seguidos para crear la macro:

Abre el menú Herramientas -> Macros -> Organizar macros -> OpenOffice.org Basic, y en el diálgo que aparece:

  • Macro desde: nombre del documento, biblioteca Standard , módulo Module1
  • Nombre de la macro: incrementa
  • pulsar botón Editar
  • en el editor de Basic, escribir el código anterior.

Creación de un botón que activa la macro

Para comprobar el funcionamiento de la macro, he creado un botón en el documento, siguiendo estos pasos:

  • menú Ver -> Barras de Herramientas -> Campos de control de formulario
  • activar Modo Diseño boton diseño
  • activar Botón boton boton y dibujar un botón en el documento.
  • seleccionar botón dibujado y pulsar clic derecho -> Campo de control; modificar las siguientes propiedades:
    • pestaña General -> Título: Incrementa factura
    • en la pestaña Acontecimientos -> Botón del ratón pulsado asignar la macro incrementa
  • en la barra de Campos de control, desactivar el botón Modo Diseño

Ahora, ya podemos comprobar como pulsando el botón que hemos creado, el contenido de la celda con el número de factura se incrementa automáticamente. Si borramos el contenido de la celda, la siguiente pulsación del botón nos mostrará el número 1.

Ejecutar la macro cada vez que se guarda el documento

Si deseamos que la macro se ejecute cada vez que guardamos el documento, tan sólo debemos seguir estos pasos:

  • menú Herramientas -> Personalizar
  • pestaña Eventos
  • seleccionar el evento Guardar documento y pulsar el botón Asignar macro.

Ahora comprobemos que cada vez que modificamos y guardamos el documento, el número también se incrementa automágicamente.

Habría otras maneras de abordar la tarea; por ejemplo, el número podría estar fuera de una tabla, en cuyo caso podríamos asignarle un marcador y en el código deberíamos usar el método apropiado (¿getTextBookmarks?) en vez de getTextTables. Me ha parecido, dada mi bisoñez con estas macros, que usar una tabla sería lo más facil de manejar, además de que para el caso que se trata (un modelo de facturas) es lo más habitual.

por hacer ...

Lo que no he sido capaz de solucionar es como guardar el documento como plantilla, de manera que en la propia plantilla se incremente el número cada vez que se crea un nuevo documento a partir de la plantilla. Queda como proyecto para cuando haya más tiempo para estudiar. ;-)

AdjuntoTamaño
autoincremento.odt32.36 KB

Introducción al IDE de programación de OOo (video tutorial)

Otro video tutorial de Alexandro Colorado del Grupo de Usuarios de Linux de Tabasco (México), que nos deleita con su agradable voz mientras nos ilustra en los primeros pasos de creación de macros en OpenOffice.org.

Disponible en:
http://superalumnos.net/files/oobasic.swf (Flash - 1,9 MB)