Java y Microsoft Word

En Java, al ser un Lenguaje Multiplataforma, no es posible hacer uso del API de Windows directamente como pasa con Visual Basic y demás lenguajes Microsoft, sin embargo, muchas veces ya sea por necesidad o por necesad tenemos que hacer uso de alguna libreria dll desde una aplicación Java.

La solución que pasa por nuestra mente es JNI (Java Native Interface), con esto, tenemos todo el poder para crear y hacer uso de cualquier libreria como lo puede hacer Visual Basic, pero.... quienes ya manejaron JNI sabrán que esto no es algo tan trivial como programar un "hola mundo". Existen diferentes herramientas que facilitan esta tarea al programador, a modo de no enfrentarse al "terrible" JNI para crear las librerias, una de estas herramientas que permite la interoperabilidad entre los objetos COM y Librerias dll de Windows es Jawin.

EJEMPLO

Primeramente, descargar jawin desde http://sourceforge.net/projects/jawinproject/

Una vez descomprimido, debemos copiar jawin.dll que se encuentra en la carpeta bin a WINDOWS/System32.

Posteriormente agregamos en NetBeans la libreria jawin.jar ubicada en la carpeta de lib (ver figura adyacente).

Con esto ya estamos listos para poder escribir el código. En la carpeta demos podrán encontrar algunos ejemplos, entre ellos el llamar y abrir Microsoft Word usando el OLE32. A esto, solo le añadiremos algunas cosas extras.

Primero que abra word pasandole nosotros el texto que queremos visualizar. Luego, crear un documento de word con texto y guardarlo y por último abrir un documento existente y ejecutar una macro.

Declaramos dos constantes y le asignamos los valores correspondientes:
static final String DOC_TEXT = "HOLA MUNDO BYTE\r\n EJEMPLO CON JAWIN";
static final String DOC_FILENAME = "ejemplo.doc";

Ahora en la clase que hayamos creado, dentro del método main o algún otro método si lo prefieren, colocamos el siguiente código mostrado en la imágen:

Como puede deducirse fácilmente, si solo deseamos crear el documento pero NO guardarlo, basta con comentar la línea 43. La línea 44 es solo para cerrar Word inmediatamente después de guardar el documento.

Por último para mandar a llamar una macro, podemos sustituir el código anterior del bloque try por el siguiente:

Ole32.CoInitialize();
DispatchPtr app = new DispatchPtr("Word.Application");
app.put("Visible", true);
DispatchPtr docs = (DispatchPtr) app.get("Documents");
DispatchPtr doc = (DispatchPtr) docs.invoke("Open","E:/transponder.doc");
app.invoke("Run","EdiciónIrA");
Ole32.CoUninitialize();

donde "EdiciónIrA" es el nombre de la macro, en este caso es el nombre de un comando de word.

Al momento de ejecutar este programa, abrira el documento indicado y mostrará la ventana de Ir a...
Esto solo es un ejemplo de lo que se puede conseguir con jawin para interoperar con objetos COM y librerias dll propias de Windows, se puede interactuar con Excel, Power Point, etc y tambien se puede hacer uso de otras dll como la user32.dll

Cabe señalar que existen otras herramientas similares a jawin, por ejemplo JNative, JACOB, etc y otras especificas para trabajar con Office como por ejemplo POI de la fundación Apache, JExcelApi para trabajar sobre Excel, siendo todos open source.

Saludos!!