Humanética

http://weblogs.javahispano.org/ricardo/date/20040526 Wednesday May 26, 2004

El desesperante mundo de MS Word

Por necesidad (no por necedad) tengo que generar unos informes en MS Word. Bueno, para hacerlo desde Java estoy utilizando JACOB (Java COM Bridge). Este proyecto permite utilizar COM haciendo un puente a través de JNI. Utilicé el jar y dll que me bajé de su página, y ... plutz, me lanzaba errores.

En la lista de yahoo, recomendada en su misma página leo que hay que actualizar la dll con una que se encuentra en la zona de descargas de la mencionada lista de correo, pues la que esta en la página oficial tiene problemas con la máquina virtual 1.4.2 (¿o era 1.4 en adelante?, no me acuerdo bien). Así que me bajo la nueva dll (con código fuente incluido). Y bien, ahora si puedo comunicarme con MS Office.

Me voy a la documentación de Office para acordarme como era su modelo de objetos (lo he usado antes con Visual Basic, sobre todo para Excel). Y ya esta, comienzo a probar y codificar. Le agrego marcas y me puedo dirigir a ellas para poner el texto, pruebo con crear tablas, y cambiar el formato de las fuentes, etc. Por ahí me quedo atascado, cuando se produce un error al intentar actualizar una propiedad. No entiendo que esta pasando, debería funcionar. Leo con mayor detenimiento la documentación y encuentro una frase como esta "las constantes x, y, z pueden no estar disponibles dependiendo de la configuración de su idioma" (por supuesto que las constantes x, y, z eran las que necesitaba); pero a quien se le ocurre poner que unos valores necesarios para establecer una propiedad dependan de la configuración del idioma. Busco una alternativa y la encuentro (felizmente).

Después me encuentro con otro problema tratando de establecer el formato de numeración y viñetas. Para hacerlo más fácil me voy al mismo Word y comienzo a probar creando macros y programando en VB para aplicaciones. Voy descubriendo algunas cosas, leyendo la ayuda y también actuando por ensayo y error ... total, mientras no se grabe nada todo seguirá igual, pienso. Pues resulta que no es así. Si le pones algún código a un documento de Word y lo ejecutas (y creo que si no lo ejecutas también), ese código "contaminará" a todos los documentos que abras en esa máquina (aunque ni siquiera le hallas dado al botón o menú guardar). Una verdadera desgracia. Al menos "es lo que dice en":

Normal -->Microsoft Objetos --> This Document

Del editor de código, donde aparece tu código. Y lo puedes ejecutar por supuesto haciendo cualquier rutina que lo llamé.

Sí, esto ya lo sabía desde hace mucho, pero la verdad es que me había olvidado. No estoy seguro si cambiando alguna configuración se puede evitar este comportamiento. Esta característica no afecta a MS Excel, que para hacer honor a la verdad, si me agrada para programar (bueno, me agradaba cuando lo usaba, pero en aquel tiempo era mucho mas impresionable que ahora).

El tema no termina ahí, pues hay muchos cambios que si los efectuas sobre el documento actual también afectarán a todos los documentos que cargues en ese equipo (me imagino que lo guarda en una plantilla o algo así). Por ejemplo, como jugando he creado 36 objetos ListTemplate en un documento de prueba que ni siquiera lo grabé (y con el código lo he creado en un Document, el actual, no en otra parte). Ahora, pruebo con cargar cualquier documento y aplicarle una línea de código y ver que también tienen los benditos 36 objetos ListTemplate:

MsgBox ActiveDocument.ListTemplates.Count (Y me aparece la cajita con el número 36 en su interior).

Por si fuera poco, la organización de cosas, que se puede ver en la ayuda en:

Información de Programación--> Referencia de Microsoft Word Visual Basic --> Objetos de Microsoft Word

no me parece de lo mejor en muchas partes. Por ejemplo (pero no la única) esta parte para cambiar y aplicar las numeraciones y viñetas. A menos que sea yo quién esta complicando lo que es sencillo al irme por caminos inapropiados. Lo cierto es que me parece desesperante trabajar con la programación de Word.

Comentarios:

Enviar un comentario:
  • Sintaxis HTML: Deshabilitado