JNI para edição de arquivos do Office em aplicações Java

Salve pessoal,

Tenho que desenvolver uma aplicação web onde será feita a leitura de arquivos do Office (.DOC, .PPT e .XLS) que conterão chaves para a geração de novos documentos, no mesmo formato daquele usado no template. Para os arquivos gerados, as chaves existentes no template serão trocadas por valores selecionados do BD.

Além de fazer a troca de chaves por valores, que serão adicionados nos arquivos gerados, estes arquivos devem ser gerados com a possibilidade de ter esses valores exibidos em uma formatação definida pelo usuário do sistema.

Essa aplicação deverá rodar num Tomcat sobre um SO Windows. Com isso, seria possível a utilização de algum compliance ActiveX ou algo do tipo do windows, manipulado no Java via JNI. Bom, pelo menos essa seria uma alternativa, já que ainda não descobri como fazer isso com a biblioteca POI do Jakarta. Na verdade, a troca de chaves por valores já foi solucionada para arquivos .XLS com um projeto do SourceForge chamado jXLS, que é baseado no POI. Porém, para o mesmo, não foi verificada a possibilidade de editar a formatação dos valores apresentados no documento gerado a partir do template, coisa que talvez seja possível com JNI.

Além disso, também é necessário que eu consiga colocar imagens, onde forem definidas chaves para isso.

Se alguém puder dar alguma luz a respeito disso, eu agradeço desde já qualquer colaboração!

[]s,

Luiz

Evite JNI; é melhor invocar um programa VBScript ou JScript (que chame um procedimento VBA que manipula seus arquivos Office) que faça esse “mail merge”.

É a solução mais robusta e que dá menos problemas. Se usar JNI (por exemplo, com a biblioteca Jacob, que lhe dá o suporte a chamar rotinas do Office via ActiveX) você corre o risco de fritar a JVM inteirinha - não dá para tratar a exceção gerada, porque ela ocorre em código nativo e a JVM normalmente reage a isso saindo completamente e fazendo você perder todas as sessões do Tomcat.

A maneira de chamar um programa VBScript ou JScript via Java é chamar (via Runtime.exec) cscript.exe, que normalmente vem instalado com o Windows (Windows Scripting Host).

Eu sugeriria usar o Jacob apenas no caso em que fosse uma aplicação desktop, em que o usuário pode reiniciar a aplicação se for necessário. Mas em uma aplicação Web é melhor nunca usar JNI porque muitas vezes o Tomcat está instalado em um servidor que está inacessível ou é de difícil acesso para os usuários.