Ler arquivos do office com Java
![]()
No passado existiu uma situação no projeto, em que existiam vários documentos de projeto (guia, arquitetura, requisitos, manual, etc.), vindo de diferentes fontes (diretório de backup, cdrom), e são documentos office (doc, xls, ppt), e vários documentos repetidos, mas de origens diferentes.
Então como saber qual é o último arquivo e remover os antigos ?
Uma maneira é abrir cada arquivo e olhar nas propriedades do mesmo, mas fazer isso manualmente com cerca de 300 arquivos, poxa não sou mais estagiário para isso :-D (nada contra os estagiários).
Então fiz um programa em java, que usa a API SDK do OpenOffice para ler estas propriedades e mostrar as datas da última modificação e o autor.
Claro que é possível usá-lo para ler qualquer outra propriedade ou expandir para outros usos.
Atualmente a pesquisa é efetuada nos seguintes arquivos com extensão: sxw doc xls odt ods pps odt odp ppt
Altere o DocViewer.java para adicionar outras extensões.
Faça o download do código fonte: DocViewer.java
(remova a extensão .txt)
Requerimentos:
Em tempo de compilação é necessário as seguintes bibliotecas:
$OO_HOME/program/classes/juh.jar $OO_HOME/program/classes/jurt.jar $OO_HOME/program/classes/jut.jar $OO_HOME/program/classes/ridl.jar $OO_HOME/program/classes/unoil.jar
A variável OO_HOME aponta para o diretório de instalação do OpenOffice. No meu caso uso o BrOffice, que está instalado em /opt/broffice.org2.3
Em runtime:
- Instalação do OpenOffice
- X Virtual Frame Buffer (Xvfb)
- Java (testei com a versão 5)
Compilação
Essa parte é simples, use sua IDE favorita ou o javac
javac -classpath /opt/broffice.org2.3/program/classes/\* src/claudius/DocViewer.java
Usei o classpath wildcards, válido apenas para o Java 6
Uso
Para colocar o openoffice em modo servidor, usei um servidor X virtual, isso é para ambiente servidor, onde não é necessário ter um monitor nem interface gráfica. No caso foi instalado o X Virtual Frame Buffer.
Se não puder instalar um servidor X virtual e iniciar a aplicação openoffice manualmente, tudo bem, basta não informar qual o servidor X a ser usado. Veja o exemplo abaixo:
Com servidor X virtual
Xvfb :5 -screen 0 800x600x16 &
/opt/broffice.org2.2/program/soffice -accept="socket,host=127.0.0.1,port=8100;urp;" -display :5 -headless -norestore -invisible &
Sem servidor X virtual
/opt/broffice.org2.2/program/soffice -accept="socket,host=127.0.0.1,port=8100;urp;" -headless -norestore -invisible &
Invocar o programa Java
A sintaxe para invocar é
java -classpath $CP claudius.DocViewer <path do arquivo ou diretório>
O classpath $CP é o mesmo usado na compilação, em adição ao diretório da classe DocViewer compilada.
O path, pode ser um arquivo único ou diretório, que neste último caso irá pesquisar nos subdiretórios também.
Exemplo
java -classpath build/classes/:/opt/broffice.org2.3/program/classes/\* claudius/DocViewer arquivo-projeto.odt
O resultado:
dir = /home/claudio/resources/palestras/2007/10_justjava file = diagnostico2.odp Modified by: Claudio Miranda 5/10/2007 17:46:8
Se essa dica foi útil para você, deixe uma mensagem comentando como isso lhe ajudou.
Deixe um comentário