Trabalhando com Automação no Word

Vou relatar aqui minha experiência com documentos do Word. Sim, é possível gerar
um documento usando o Microsoft Office Interop Assemblies.

Optei por utilizar o Word já que aqui no trabalho havia licenças, e também porque
algumas outras ferramentas, ou não tinham os recursos que eu precisava, ou necessitavam
de ActiveX para o navegador na parte do cliente.

Vamos começar pelo objetivo. O meu objetivo é: gerar um documento com informações
baseadas num documento modelo.

Este documento modelo possui marcadores, onde serão substituídos pelos valores reais,
podendo ser texto, imagens, tabelas, etc. Mais tarde darei detalhes de como criar
um documento com esses tipos de conteúdo.

Desvantagens: A necessidade de ter o Word instalado no servidor pode ser um problema.
Sua aplicação deve estar num servidor dedicado para que você possa instalar uma
versão do Word. Outra desvantagem é que achei a velocidade de processamento um pouco
baixa, mas isso também depende do equipamento em questão.

Como preparar o ambiente

Bom, como você já deve ter constatado, em primeiro lugar você precisa instalar o
Word no servidor da sua aplicação. Você pode utilizar o Office XP, 2003 ou 2007.
Porém meus testes foram somente nas versões 2003 e 2007.

De acordo com a versão do Word que você tiver, temos que instalar a versão do Office
Interop correspondente. Para o Office 2003, utilize esse link:

Office 2003 Interop

Em alguns servidores, foi necessário mudar uma configuração de segurança do DCOM+
no servidor. Para dar a permissão necessária, execute DCOMCNFG, entre em
Serviços de Componente, Computador, Config. DCOM. Localize o item Documento do Microsoft
Word
, entre em Propriedades, Segurança. Aqui você deve dar permissões de
Ativação para a conta do IIS/ASP.NET. Em alguns casos, esta conta é o Network Service,
ou ASPNET.


Outra consideração importante: Em algumas máquinas, foi necessário usar o impersonate
para rodar como Administrador. Ainda não descobri como fazer para que o Word rode
sob a conta do IIS/ASP.NET. Se você usar o impersonate, a alteração anterior
(do DCOMCNFG) não seria necessária.

Preparando a Aplicação ASP.NET

Estou utilizando o Visual Studio 2008, porém com Framework 2.0. Para começar, crie
uma Web Application.

Agora você terá que adicionar as referências ao Interop do Word. Você pode fazer
isso editando a Web.Config, abaixo de system.web/compilation/assemblies,
inclua a seguinte linha:

<add assembly=Microsoft.Office.Interop.Word, Version=11.0.0.0, Culture=neutral, PublicKeyToken=71E9BCE111E9429C/>

Feito isso, podemos começar a criar documentos do Word de fato. Faça seu modelo,
e coloque em alguma pasta na sua aplicação (recomendo o App_Data).

Crie um generic handler, que pode ser chamado de gerardoc.ashx, e uma classe no
App_Code chamada WordDoc. Lembrando que esses nomes são apenas sugestões. Você pode
usar os nomes que desejar.

A classe WordDoc é a responsável pela montagem do Documento. O generic handler vai
usar a classe WordDoc para que o usuário possa baixar o documento gerado.

Na classe WordDoc, você verá os métodos PrepararDocumento e GerarDocumento. O método
PrepararDocumento é responsável por obter os dados que você irá incluir no documento,
podendo ser texto, imagens, tabelas, etc. O método GerarDocumento instancia o Word,
e realiza as operações baseados nos dados.

Você vai reparar que o método GerarDocumento possui um atributo STAThread.Isso é
necessário no caso de se trabalhar com imagens, porque a única forma que encontrei
de incluir imagens no Word é utilizando a área de transferência, e como não podemos
usá-la num contexto Web, utilizei o modo Single Thread Apartment para este
método, e adicionei uma referência à System.Windows.Forms. Se você não for
trabalhar com imagens, pode retirar o atributo, modificar a chamada desse método
e remover a referência à System.Windows.Forms.

Baixe o zip

Até a próxima.

Um pensamento sobre “Trabalhando com Automação no Word

  1. Olá, gostei da sua matéria e gostaria de dar uma olhada no código, porém o link está quebrado. Teria como disponibilizar novamente?

    Se achar melhor pode me mandar por email.

    Obrigado!

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s