Trabalhando com arquivos Microsoft Word em Java

Neste artigo explicarei como manipular documentos do Microsoft Word 97-2003, utilizando uma excelente API chamada Jakarta POI. Neste artigo falarei somente até a versão 2003 do Microsoft Word, pois na versão 2007 ele trabalha de uma forma diferente.

Por | @oficinadanet Programação
Olá a todos. Meus artigos são diretos, não fico enchendo muito de conteúdo que eu não julgo necessário, por isso se sentiram carência em algum tema, por favor, me escreve que poderei fazer um artigo somente para aquele tema em especifico.

Introdução

Neste artigo explicarei como manipular documentos do Microsoft Word 97-2003, utilizando uma excelente API chamada Jakarta POI [http://poi.apache.org/]. Neste artigo falarei somente até a versão 2003 do Microsoft Word, pois na versão 2007 ele trabalha de uma forma diferente.

Problema

Vamos simular uma situação onde a esta aplicação poderia ser utilizada. Tenho um contrato que é padrão para todos os clientes, mas eu preciso inserir em cada contrato, o nome, o valor do contrato e o valor em porcentagem da multa e enviar para efeito de teste, salvar o contrato com o nome da empresa em formato pdf. Outra possibilidade do problema seria criar um e-mail marketing e enviar por e-mail para uma lista de usuários cadastrados.

A API Jakarta POI

Esta API é fantástica, tem diversas funções e não serve apenas para trabalhar com arquivos do Microsoft Word, serve também para arquivos do Microsoft Excel, Microsoft Visio, Microsoft PowerPoint, entre outros, a versão estável até o momento da escrita deste artigo era a versão 3.2. Os desenvolvedores estão trabalhando na versão 3.5 que suportará arquivos Microsoft Office 2007. No exemplo do projeto eu explicarei algumas das funções da API, pode até ser que eu fuja um pouco da solução do problema, porém creio que ficará fácil para entender como trabalhar com a API.

Solução

A solução para o problema não é tão complexa, basta você abrir o arquivo Microsoft Word desejado, encontrar os trechos onde deseja que sejam as palavras sejam substituídas, e substituí-las. Para isso eu colocarei no meio do meu arquivo contrato.doc umas “TAGS PERSONALIZADAS”, estas TAGS poderiam ser quaisquer palavras, eu adotei um padrão para não correr o risco de alterar algo que não quisesse que fosse alterado. O padrão utilizado foi o seguinte:

#NOME_DO_CAMPO#


As minhas variáveis ficaram da seguinte forma no arquivo contrato.doc

#NOME_EMPRESA#

#VALOR_CONTRATO#

#VALOR_MULTA#


Sobre o contrato, ele não é especifico para o que vou demonstrar, ele foi retirado do site http://www.sitecontabil.com.br/modelos_contrato.htm e o link para download do contrato de exemplo é esse aqui:  http://www.sitecontabil.com.br/modelos_contrato/0338.htm. Utilizei apenas alguns espaços que não são exatamente para o que deveria, mas como o objetivo deste artigo é mostrar a aplicação funcionando, não vi muita necessidade em ter um exemplo que se encaixe perfeitamente com o artigo.

Código

Como o objetivo é mostrar o funcionamento da API Jakarta POI, e não sobre SWING ou Desenvolvimento WEB, fiz um código, que em minha opinião está bem didático e comentado, facilitando o entendimento. O código do projeto pode ser baixado do link (anexo) abaixo da matéria.

Para o desenvolvimento foi necessário o download da biblioteca Jakarta POI, que está no link download do site da API, também está no arquivo do projeto.

No exemplo mostro como extrair o texto de duas possibilidades:
1ª usando o WordExtractor: fará com que você pegue a o conteúdo e armazene em uma String, no exemplo eu usei, StringBuilder, por ela ser mais rápida que a String o que facilitará ainda mais a substituição.

2ª usando o Range: que tem um método, muito eficiente que faz a modificação do texto através do método replaceText(String parametroABuscar, String parametroASubstituir).

Apenas para efeito de demonstração da API, adicionarei um parágrafo no começo e no final do Arquivo contendo os meus dados. Com isso o exemplo não só mostrará como substituir, mas também como adicionar conteúdo.

Como o objetivo não é como mostrar a geração de PDF, a parte do PDF está muito simples, deveria ser melhorada, mas isso é para outro artigo.

O exemplo foi desenvolvido utilizando Java 6, Eclipse Ganymede e NetBeans 6.5.

Conclusão

Esta API não se restringe apenas a arquivos Microsoft Word, como mencionei acima pode ser usada com outros formatos também, para maiores informações acesse o site do projeto: http://poi.apache.org/

Com isso encerro aqui o meu artigo, caso tenham alguma dúvida, podem me enviar um e-mail, que na medida do possível estarei respondendo, estou aberto a sugestões para próximos artigos.

Até o próximo pessoal.

Mais sobre: java word programação
Share Tweet
Recomendado
Comentários
Destaquesver tudo