diciembre 2010

You are currently browsing the monthly archive for diciembre 2010.

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

Este contenido está protegido por contraseña. Para verlo introduce tu contraseña a continuación:

Hace poco tiempo se hablaba en Nature (noticia en Nature) sobre un congreso en el que se propone la creación de una base de datos global de datos climáticos. Una base de datos de este tipo permitiría, por ejemplo, verificar de forma transparente la validez de las afirmaciones hechas en los estudios sobre el cambio climático. Aunque los resultados están avalados de sobra por la comunidad científica, la transparencia en estos temas le daría aún una mayor fortaleza. En otro artículo en Nature se habla justo sobre la necesidad de acceso a los datos climáticos históricos: Artículo en Nature (acceso restringido).

Hoy se ha producido una gran noticia en este sentido que era esperada desde hace mucho tiempo. La Agencia Estatal de Meteorología (AEMET) acaba de anunciar la liberación de sus datos meteorológicos y climáticos. Los datos se pueden acceder en http://www.aemet.es/es/eltiempo/observacion/ultimosdatos y descargarse en ftp://ftpdatos.aemet.es/.

La AEMET cobraba por el acceso a los datos meteorológicos históricos (precios fijados en la ORDEN MAM/160/2006, de 2 de enero; BOE nº 27 de 1 de febrero de 2006). Esto, que tenía sentido en los tiempos en los que la reproducción de los datos era costosa, hacía tiempo que había perdido su razón de ser. Se trataba de datos públicos, pagados con el dinero de todos, secuestrados por una regulación obsoleta. Algo curioso es la existencia de terceras empresas que venden los datos meteorológicos y climáticos históricos. ¿Cómo podían estas empresas comerciar con estos datos pagados con dinero de todos mientras los demás no teníamos acceso a ellos? Quizás son otros datos distintos pero siempre quedaba la duda.

Con esta noticia se da un gran paso tanto en la transparencia de nuestra administración como en la disponibilidad pública de datos de gran valor. Este paso era necesario para garantizar que los resultados de los estudios que los usen sean repetibles y, por lo tanto, verificables. Pero también es un paso hacia la creación de nuevas iniciativas emprendedoras que hagan uso de ellos. Esperemos que cunda el ejemplo y se siga en el futuro el mismo camino tomado por la AEMET.

Actualización 2012-10-29: Lamentablemente los datos dejan de ofrecerse públicamente desde el 29 de octubre de 2012.

Enlaces relacionados

Vía: Barrapunto

Tags: , , ,