OpenOffice

You are currently browsing articles tagged OpenOffice.

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: , ,

Una de los detalles más útiles de las últimas versiones de OpenOffice es que dispone de un gestor de base de datos. Este gestor se puede usar como interfaz sencilla entre un motor de bases de datos como PostgreSQL o MySQL y los otros programas de la suite. Al conectar y registrar una base de datos se puede acceder a las distintas tablas, vistas y consultas desde, por ejemplo, el writer. Esto nos permite insertar campos de las tablas en nuestros documentos e incluso crear distintos documentos con “datos personalizados”.

Conectar con una base de datos

Para conectar con una base de datos existente hay que un documento de “Base de datos” nuevo. Al principio se abrirá un asistente en el que elegiremos “conectar con una base de datos existente”. Aquí tenemos muchas interfaces para fuentes de datos a las que conectarnos: JDBC, Oracle JDBC, dBase, Texto (¡permite acceder incluso a datos en formato csv!), Hoja de cálculo, ODBC. En el caso de trabajar con un Mac incluso nos podemos conectar a la libreta de direcciones. Si lo tenemos instalado también aparecerá una interfaz nativa para conectarnos a bases de datos MySQL.

Con la interfaz nativa yo me he encontrado con el problema de no poder aislar la base de datos concreta que quiero usar de las demás a las que tengo acceso. Normalmente teniendo Java instalado una buena opción es instalar el controlador JDBC para MySQL o para el tipo de base de datos que vayamos a utilizar (por ejemplo PostgreSQL). Otra opción que también funciona, sobre todo si trabajamos con Windows, es instalar  y usar el controlador ODBC apropiado. Esta redundancia en los interfaces de conexión puede ser muy útil en el caso de que alguno de las interfaces no nos funcione.

En el caso de una base de datos MySQL podemos elegir la opción MySQL y después “conectar usando JDBC” (Si usamos directamente la opción JDBC la clase será: “com.mysql.jdbc.Driver”). Introducimos los parámetros para la conexión y el nombre de la base de datos y pulsamos “siguiente>>”. En la siguiente pantalla introducimos el nombre de usuario y la contraseña y probamos que la conexión funciona con el botón “Conexión de prueba”. La última pantalla tiene una de las opciones más interesantes que es la de registrar la base de datos en OpenOffice.org, esto nos permite después acceder a ella desde las otras aplicaciones (al contrario de lo que el nombre sugiere el registro no tiene nada que ver con mandar datos a OpenOffice.org).

Ya tenemos la base da datos registrada y, dependiendo de nuestros permisos, podemos manipularla o leerla desde el programa de gestión. Una limitación es que nos limitamos en cuanto a funcionalidad al mínimo común denominador entre todas las bases de datos, algo que es casi ineludible en un programa de uso general como este. Una de las cosas más interesante es que además podemos usar la base de datos desde otras aplicaciones si la hemos registrado.

Bases de datos desde writer

En writer podemos usar los valores almacenados en la base de datos. Podemos crear informes detallados con nuestro propio formato en el que sustituyamos algunas zonas por los datos de una tabla. Por ejemplo, si tuviéramos una tabla con datos de las facturas podríamos generar todas las facturas que queramos como documentos.

Los campos se introducen en “Insertar”->”Campos”->”Otros…” en la pestaña “Bases de datos” con la opción “Campos de combinación de correspondencia”. También se pueden insertar usando el botón “Fuentes de Datos” de la barra de herramientas y arrastrando el nombre de la columna de una tabla a su posición en el documento.

Si queremos obtener simplemente una combinación de fichas con los datos de una tabla habría que hacer lo siguiente:

Creamos nuestra plantilla e insertamos los campos a sustituir con uno de los dos métodos explicados anteriormente. Abrimos “Herramientas”->”Asistente para combinar correspondencia”. Aquí pasamos directamente al apartado 7 “Personalizar documento” pues se supone que ya tenemos todos los pasos anteriores hechos (incluida la inserción de los campos a sustituir). Después en el apartado 8 elegimos “Guardar documento combinado” y debajo “Guardar como documento único” y pulsamos “Guardar documentos”.

En mi versión de OpenOffice aparte de guardarse el documento con el nombre elegido también se crea un documento idéntico sin nombre que se mantiene abierto para editar y, el archivo abierto de la propia plantilla también cambia de nombre a veces (¿error o característica?). En este caso yo cierro y vuelvo a abrir el documento guardado para evitar confusiones.

El problema que aparece aquí es que el documento combinado presenta unos saltos de página especiales en los que se resetea el contador de páginas. Esto es muy útil cuando en realidad se trata de documentos separados dentro de un documento maestro contenedor, por ejemplo, un montón de cartas individuales dentro de un documento o diferentes facturas. Pero es un problema a la hora de hacer, por ejemplo, un documento general con fichas de datos, en el que se quiera mantener una numeración normal. En una próxima entrada veremos como solucionar esto.

Tags: ,

La suite ofimática OpenOffice es en la actualidad un digno competidor de Microsoft Office con la gran ventaja de ser software libre. Además se apoya en estándares abiertos que han sido aprobados por ISO (ISO/IEC 26300) sin ningún proceso sospechoso. El OpenDocument, aparte de generar menos dudas que el formato OOXML de Microsoft, puede ser manipulado en la práctica por varios programas como Google Docs o el propio Microsoft Office y, si se usa OpenOffice, el coste del software es nulo aparte de totalmente legal.

En los últimos tiempos han aparecido algunas dudas sobre el futuro de OpenOffice tras la adquisición de Sun, la empresa que promovía su desarrollo, por Oracle. Esto ha sido el detonante de la creación de la bifurcación denominada LibreOffice, una implementación que, por el momento, es prácticamente una copia de OpenOffice pero que posiblemente tenga mucho que decir en el futuro. Es posible que el control estricto que ejercía Sun sobre el desarrollo de OpenOffice y la obligación de ceder el Copyright a la hora de contribuir al proyecto frenaran su desarrollo.

OpenOffice es una gran herramienta que está en continuo desarrollo, la comunidad de usuarios parece muy involucrada y siempre dispuesta a ayudar. Las nuevas herramientas de bases de datos lo hacen cada vez más potente aunque se encuentran en sus primeras fases de desarrollo y no disponen de todas las características que se esperan aún. En próximas entradas voy a explicar como he solucionado algunos de los problemas que me he ido encontrando al usar OpenOffice.

Tags: ,