Basic

You are currently browsing articles tagged Basic.

En un post anterior se explicaba como acceder a una base de datos desde OpenOffice, generar documentos con los datos obtenidos de la base de datos y cómo un documento obtenido así presentaba una numeración de página con saltos. Los saltos se deben a que el documento se entiende como un conjunto de documentos independientes puestos juntos, sin embargo, a veces esto no nos interesa y necesitamos resetear el contador de páginas para obtener una paginación normal. Para eso usaremos una macro en Basic.

Reseteo del número de página

Para restear ese cambio de numeración de página habría que ponerse en el principio del primer párrafo tras el salto de página que queremos cambiar. Nos metemos en «Formato»->»Párrafo…» y, en la pestaña «Flujo de texto» vemos que en el apartado salto hay marcado un salto de página y el recuadro de «Con estilo de página», un estilo de página (normalmente «Predeterminado») y «número de página» con un valor de 1. Si ponemos 0 en este valor ya no se produce el salto en la numeración de página.

Pero claro, esto esta muy bien si son pocos los documentos combinados. ¿Qué hacer si son muchos?

Macro para resetear el número de página

Tras mucho buscar encontré un macro para hacer esto en este hilo del foro de usuarios de OpenOffice. El macro ya adaptado para que funcione directamente es el siguiente:

Sub Main
Dim document As Object
document = ThisComponent
Dim oTextEnum As Object
Dim oTextElement As Object
Dim oTextPortionEnum As Object
Dim oTextPortion As Object
 
oTextEnum = document.Text.createEnumeration
 
While oTextEnum.hasMoreElements() REM iterate through paragraphs and tables
     oTextElement = oTextEnum.nextElement()
   If oTextElement.supportsService("com.sun.star.text.Paragraph") Then
      oTextPortionEnum = oTextElement.createEnumeration()
      While oTextPortionEnum.hasMoreElements()
         oTextPortion = oTextPortionEnum.nextElement()
         If oTextPortion.PageNumberOffset = 1 Then
            oTextPortion.PageNumberOffset = 0
         End If
      Wend
 
   End If
Wend
 
End Sub

Espero que a alguien le pueda servir y que no tenga que buscar tanto como yo una solución para algo que debería ser sencillo.

Tags: , , ,

OpenOffice dispone de un entorno de ejecución de macros. Para este entorno se pueden elegir distintos lenguajes como BeamShell, JavaScript, Python y una versión de Basic. Todos estos lenguajes parece que se acaban basando en un modelo de software denominado UNO. A UNO también se puede acceder desde otros lenguajes externos.

Para realizar alguna tarea repetitiva y tediosa decidí usar macros y dentro de estos macros me decanté por usar Basic ya que pensé que podría ser apropiado para las tareas sencillas que tenía que hacer. Por lo poco que he podido ir viendo hay más de una forma de hacer las cosas pero ninguna de ellas me ha parecido intuitiva ni evidente. La documentación que he encontrado me parece relativamente pobre y se echa mucho en falta una descripción más detallada de los métodos disponibles. Muchas veces la única forma de avanzar es por ensayo y error (al menos hay un pequeño debuger en la herramienta de edición de macros) y a veces se encuentran fallos bastante difíciles de explicar. Por lo que he visto, muchas veces la forma más fácil de encontrar algo es preguntando en el foro, esto puede ser un problema si tienes plazos.

En este punto es donde he notado dos detalles: a) la documentación sobre macros parece estar hecha por desarrolladores y para desarrolladores y b) después de todo el recorrido que lleva OpenOffice esta parte es claramente mejorable. Esto es lo que me lleva a pensar que quizás el estricto control de Sun retrasara el desarrollo de OpenOffice porque no es normal que en un programa tan usado y tan útil haya esas carencias tan evidentes (en este campo).

Algunos enlaces interesantes sobre macros:

Foros donde encontrar ayuda:

Tags: , ,