Um exemplo de OpenXML
Uma das características mais interessantes do novo formato de arquivo do Office 2007, também disponível no Office 2003, é que os arquivos de dados são na verdade arquivos “.zip” contendo arquivos XML dentro deles. Por causa disto, seu conteúdo é facilmente visível e modificável.
Veja um exemplo simples:
1. Abra o Word 2007 e digite “Mara tinha um carneirinho”;
2. Faça “paste” de uma imagem qualquer, por exemplo obtida com “Alt-Print Screen”;
3. Salve como “Alo.docx”;
4. Vá para o Windowsx exmplorer e renomeie para “Alo.zip”;
5. Dê um clique duplo e observe seu conteúdo na sua ferramenta de visualização de arquivos “zip”.
Você verá que existe o seguinte dentro deste zip:
· Um arquivo chamado [Content_Types].xml que serve basicamente para identificar o tipo de arquivo (Word, no caso), através da listagem dos tipos de dados que ele contém;
· Pasta “Word”, contendo o grosso do documento;
· Pasta “rels”, que identifica os relacionamentos entre os diversos componentes do arquivo;
· Pasta “DocProps”, que contém arquivos com propriedades diversas do documento, como versão, tamanho, template usado, autor, quantidade de revisões, etc.
A pasta “Word” é a com mais conteúdo. Eu destacaria o seguinte:
· Pasta “media”, contendo a imagem que fizemos “paste” anteriormente sob o nome “image1.png”;
· Arquivo “document.xml”, contendo o documento em si.
Uma brincadeira interessante é extrair o conteúdo do arquivo zip para uma pasta e fazer o seguinte:
1. Edite o arquivo “document.xml” e modificar o texto “Maria tinha um carneirinho para outra coisa”, tomando cuidado de não tocar no resto. Não use caracteres acentuados por enquanto;
2. Substitua a imagem por outra, mas mantendo o mesmo nome “picture1.png”;
3. Comprima as pastas originais e seu conteúdo modificado para um arquivo zip chamado “Alo2.zip;
4. Renomeie o arquivo “Alo2.zip” para “Alo2.docx”;
5. Abra o arquivo “Alo2.docx” no Word.
Observe que as mudanças aparecem!
Evidentemente este é um processo manual que pode ser automatizado. O .NET Framerwork 3.0 contém uma API para manipulação deste tipo de arquivo .zip que facilita bastante a automatização destes procedimentos. Veja alguns exemplos de código em http://www.codeplex.com/NDOS/Wiki/View.aspx?title=OXML%20e%20Interoperabilidade&referringTitle=Home.