ASP .NET -  Trabalhando com o Microsoft Word


Este artigo mostra como criar e modificar documentos usando o Microsoft Word em páginas ASP .NET.

Já publiquei diversos artigos sobre esse assunto, confira nos links abaixo:

O termo automação é na verdade um processo que permite que aplicações escritas em VB .NET ou C# possam controlar de forma programática, ou seja : via código, outras aplicações.

 

A automação para o Microsoft Word permite realizar ações como criar novos documentos, incluir textos em um documento, formatar documentos e efetuar mala direta (mail merge) de documentos com textos.

 

Usando o Microsoft Word ou outras aplicações do pacote Office praticamente todas as ações que você realiza manualmente nas aplicações através da interface do usuário pode ser também realizada via código usando a automação.

 

O Microsoft Word, foco deste artigo , expõe a sua funcionalidade através de um modelo de objeto. O modelo de objeto é composto de uma coleção de classes e métodos representando os componentes lógico do Word. Assim temos o objeto Application representando a aplicação Word, o objeto Document representando o documento Word, o objeto Paragraph representando o parágrafo do documento Word e assim por diante, onde cada objeto possui toda a funcionalidade do componente do Word.

 

Word Object Model

Imagem retirada de: http://msdn.microsoft.com/en-us/library/kw65a0we(VS.80).aspx

 


 

Nota: A versão 3.5 da plataforma .NET , no VS 2008 , temos opções de criar projetos do tipo Office 2007 com diversos templates, inclusive o Word 2007 Document. (Estarei tratando deste assunto em outro artigo.)

 

Para podermos manipular o Microsoft Word em nossas aplicações ASP.NET/VB .NET temos que incluir uma referência COM ao projeto clicando com o botão direito do mouse sobre o nome do projeto e selecionando a opção Add Reference;

 

Em seguida ativamos a guia COM e selecionamos o Componente COM para o Microsoft Word que vai variar dependendo da versão que você tem instalada.

 

Feito isso já podemos criar uma instância da aplicação Word na aplicação ASP .NET;

Dim wdApp As New Microsoft.Office.Interop.Word.Application

Nota:  Como o modelo de objetos possui uma centena de propriedades e métodos , uma das maneiras mais simples de realizar uma tarefa usando a automação e usar o gravador de Macro da aplicação Office, no caso o Word , efetuar a gravação da macro para uma determinar tarefa. Em seguida espie o código e use-o na sua aplicação ASP .NET

Assim , se desejamos abrir o arquivo macoratti.doc na pasta c:\dados e incluir um texto ao mesmo em uma aplicação ASP .NET usando automação, usamos o gravador de macro para obter o código a seguir:

Abra o Visual Studio 2008 (estou usando a versão trial) e crie um novo projeto Web do tipo ASP .NET web Application com o nome aspNet_Word;

A partir da ToolBox inclua um botão de comando na página Default.aspx e inclua o código abaixo no evento Click do botão:

Protected Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click
 

Dim fileName As Object = "c:\dados\macoratti.doc"

Dim [readOnly] As Object = False

Dim isVisible As Object = True


Dim
missing As Object = System.Reflection.Missing.Value

Dim oWordApp As New Microsoft.Office.Interop.Word.Application


Dim
oWordDoc As Microsoft.Office.Interop.Word.Document = oWordApp.Documents.Open(fileName, missing, [readOnly], missing, missing, missing, missing, missing, missing, missing, missing, isVisible, missing, missing, missing)
 

oWordDoc.Activate()

oWordApp.Selection.TypeText("www.macoratti.net - teste de inclusÆo de texto...")

oWordApp.Selection.TypeParagraph()

oWordDoc.Save()

oWordApp.Application.Quit(missing, missing, missing)


End
Sub

A assinatura do método Open  possui 15 argumentos do tipo Object , onde o primeiro argumento é o nome do arquivo.

No site CodeProject , link : http://www.codeproject.com/KB/aspnet/wordapplication.aspx existe um artigo no qual o autor criou uma classe com diversos métodos que realizam as mais diversas tarefas no Word via automação.

O trecho do código da classe convertida para a linguagem VB .NET e feitos algumas alterações segue abaixo:

Imports System

Imports System.ComponentModel
 

Namespace WordApplication


Public
Class WordApp


' referencia a uma aplicação Word

Private oWordApplic As Microsoft.Office.Interop.Word.Application


' referencia a um documento Word

Private oDoc As Microsoft.Office.Interop.Word.Document


 

Public Sub New()

   ' ativa a interface com o objeto COM do Microsoft Word

   oWordApplic = New Microsoft.Office.Interop.Word.Application

End Sub
 

 ' Abre o arquivo e ativa-o (ele tem que existir)

Public Sub Open(ByVal strFileName As String)

 

Dim fileName As Object = strFileName

Dim [readOnly] As Object = False

Dim isVisible As Object = True


Dim
missing As Object = System.Reflection.Missing.Value

oDoc = oWordApplic.Documents.Open(fileName, missing, [readOnly], missing, missing, missing, _

missing, missing, missing, missing, missing, isVisible, missing, missing, missing)
 

oDoc.Activate()

End Sub


' Abre um novo documento

Public Sub Open()

   Dim missing As Object = System.Reflection.Missing.Value

   oDoc = oWordApplic.Documents.Add(missing, missing, missing, missing)

   oDoc.Activate()

End Sub
 

' encerra o Word

Public Sub Quit()

   Dim missing As Object = System.Reflection.Missing.Value

   oWordApplic.Application.Quit(missing, missing, missing)

End Sub

 

'Salva o documento Word
Public
Sub Save()

    oDoc.Save()

End Sub

 

'Salvar como
Public
Sub SaveAs(ByVal strFileName As String)
 

  Dim missing As Object = System.Reflection.Missing.Value

  Dim fileName As Object = strFileName

 

   oDoc.SaveAs(fileName, missing, missing, missing, missing, missing, _

                       missing, missing, missing, missing, missing, missing, _

                        missing, missing, missing, missing)

End Sub

......

......

End Sub

End Class

End Namespace

Com a classe definida no seu projeto basta apenas criar uma instância da mesma e usar o método desejado::

Veja o código abaixo que realiza as seguintes tarefas:

Protected Sub Button2_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button2.Click
 

Dim oWord_AspNet As WordApplication.WordApp


oWord_AspNet = New WordApplication.WordApp

oWord_AspNet.Open("c:\dados\macoratti.doc")

oWord_AspNet.InsertText(" macoratti.net - quase tudo para vb.net e asp.net")

oWord_AspNet.InsertLineBreak()

oWord_AspNet.Save()

oWord_AspNet.Quit()

 

End Sub

Muito mais enxuto , não é mesmo ???

Lembre-se que as páginas ASP .NET residem em um servidor web e o acesso aos adequados devem ser concedidos para que os arquivos possam ser lidos e escritos.  (O Word também deve estar instalado no servidor.)

Pegue o projeto completo aqui :  aspNet_Word.zip

Eu sei é apenas ASP .NET , mas eu gosto...

Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

 

             Gostou ?   Compartilhe no Facebook   Compartilhe no Twitter
 

Referências:


José Carlos Macoratti