Como automatizar o Word para criar uma mala direta do Visual Basic .NET

IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.

Clique aqui para ver a versão em Inglês deste artigo: 301656
Sumário
Este artigo demonstra como usar o Microsoft Office Word para criar um documento de mala direta usando a automação do Microsoft Visual Basic. NET.
Mais Informações
Automação é um processo que permite que aplicativos que são escritos em linguagens como o Visual Basic .NET controlem programaticamente outros aplicativos. Automação para o Word permite que você execute ações como criar novos documentos, adicionar texto para documentos e formatação de documentos. Com o Word e outros aplicativos do Microsoft Office, praticamente todas as ações que você pode executar manualmente por meio da interface do usuário também podem ser executadas por meio de programação usando automação.

Word expõe esta funcionalidade através de programação através de um modelo de objeto. O modelo de objeto é uma coleção de classes e métodos que servem como correspondentes para os componentes lógicos do Word. Por exemplo, há um objeto Application , um objeto Document e um objeto Paragraph , cada um deles contém a funcionalidade desses componentes no Word. Para acessar o modelo de objeto do Visual Basic. NET, você pode definir uma referência de projeto à biblioteca de tipos.

Este artigo demonstra como definir a referência de projeto adequada à biblioteca de tipo do Word para Visual Basic .NET e fornece código de exemplo para automatizar o Word.

Criar um cliente de automação para o Word

  1. Inicie o Microsoft Visual Studio NET..
  2. No menu arquivo , clique em novo e, em seguida, clique em Project . Selecione Windows Application dos tipos de projeto do Visual Basic. O Form1 é criado por padrão.
  3. Adicione uma referência ao Microsoft Word Object Library . Para fazer isso, execute as seguintes etapas:
    1. No menu Project , clique em Add Reference .
    2. Na guia COM , localize Microsoft Word Object Library e, em seguida, clique em Selecionar .

      Observação Microsoft Office 2003 inclui assemblies de interoperabilidade primários (PIAs). Microsoft Office XP não inclui PIAs, mas podem ser baixados. Para obter mais informações sobre PIAs do Office XP, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
      328912Microsoft Office XP módulos de interoperabilidade primários (PIAs) estão disponíveis para download
    3. Clique em OK na caixa de diálogo Add References para aceitar as seleções.
  4. No menu Exibir , selecione a caixa de ferramentas para exibir a caixa de ferramentas e, em seguida, adicione um botão ao Form1.
  5. Clique duas vezes em Button1 . A janela de código para o formulário é exibida.
  6. Na janela código, substitua o código a seguir.
        Private Sub Button1_Click(ByVal sender As System.Object, _       ByVal e As System.EventArgs) Handles Button1.Click    End Sub					
    use o código a seguir.
        Dim wrdApp As Word.Application    Dim wrdDoc As Word._Document    Private Sub InsertLines(ByVal LineNum As Integer)        Dim iCount As Integer        ' Insert "LineNum" blank lines.        For iCount = 1 To LineNum            wrdApp.Selection.TypeParagraph()        Next iCount    End Sub    Private Sub FillRow(ByVal Doc As Word.Document, ByVal Row As Integer, _    ByVal Text1 As String, ByVal Text2 As String, _    ByVal Text3 As String, ByVal Text4 As String)        With Doc.Tables.Item(1)            ' Insert the data in the specific cell.            .Cell(Row, 1).Range.InsertAfter(Text1)            .Cell(Row, 2).Range.InsertAfter(Text2)            .Cell(Row, 3).Range.InsertAfter(Text3)            .Cell(Row, 4).Range.InsertAfter(Text4)        End With    End Sub    Private Sub CreateMailMergeDataFile()        Dim wrdDataDoc As Word._Document        Dim iCount As Integer        ' Create a data source at C:\DataDoc.doc containing the field data.        wrdDoc.MailMerge.CreateDataSource(Name:="C:\DataDoc.doc", _              HeaderRecord:="FirstName, LastName, Address, CityStateZip")        ' Open the file to insert data.        wrdDataDoc = wrdApp.Documents.Open("C:\DataDoc.doc")        For iCount = 1 To 2            wrdDataDoc.Tables.Item(1).Rows.Add()        Next iCount        ' Fill in the data.        FillRow(wrdDataDoc, 2, "Steve", "DeBroux", _              "4567 Main Street", "Buffalo, NY  98052")        FillRow(wrdDataDoc, 3, "Jan", "Miksovsky", _              "1234 5th Street", "Charlotte, NC  98765")        FillRow(wrdDataDoc, 4, "Brian", "Valentine", _              "12348 78th Street  Apt. 214", "Lubbock, TX  25874")        ' Save and close the file.        wrdDataDoc.Save()        wrdDataDoc.Close(False)    End Sub    Private Sub Button1_Click(ByVal sender As System.Object, _       ByVal e As System.EventArgs) Handles Button1.Click        Dim wrdSelection As Word.Selection        Dim wrdMailMerge As Word.MailMerge        Dim wrdMergeFields As Word.MailMergeFields        Dim StrToAdd As String        ' Create an instance of Word  and make it visible.        wrdApp = CreateObject("Word.Application")        wrdApp.Visible = True        ' Add a new document.        wrdDoc = wrdApp.Documents.Add()        wrdDoc.Select()        wrdSelection = wrdApp.Selection()        wrdMailMerge = wrdDoc.MailMerge()        ' Create MailMerge Data file.        CreateMailMergeDataFile()        ' Create a string and insert it in the document.        StrToAdd = "State University" & vbCr & _                    "Electrical Engineering Department"        wrdSelection.ParagraphFormat.Alignment = _                    Word.WdParagraphAlignment.wdAlignParagraphCenter        wrdSelection.TypeText(StrToAdd)        InsertLines(4)        ' Insert merge data.        wrdSelection.ParagraphFormat.Alignment = _                    Word.WdParagraphAlignment.wdAlignParagraphLeft        wrdMergeFields = wrdMailMerge.Fields()        wrdMergeFields.Add(wrdSelection.Range, "FirstName")        wrdSelection.TypeText(" ")        wrdMergeFields.Add(wrdSelection.Range, "LastName")        wrdSelection.TypeParagraph()        wrdMergeFields.Add(wrdSelection.Range, "Address")        wrdSelection.TypeParagraph()        wrdMergeFields.Add(wrdSelection.Range, "CityStateZip")        InsertLines(2)        ' Right justify the line and insert a date field        ' with the current date.        wrdSelection.ParagraphFormat.Alignment = _               Word.WdParagraphAlignment.wdAlignParagraphRight        wrdSelection.InsertDateTime( _              DateTimeFormat:="dddd, MMMM dd, yyyy", _              InsertAsField:=False)        InsertLines(2)        ' Justify the rest of the document.        wrdSelection.ParagraphFormat.Alignment = _               Word.WdParagraphAlignment.wdAlignParagraphJustify        wrdSelection.TypeText("Dear ")        wrdMergeFields.Add(wrdSelection.Range, "FirstName")        wrdSelection.TypeText(",")        InsertLines(2)        ' Create a string and insert it into the document.        StrToAdd = "Thank you for your recent request for next " & _            "semester's class schedule for the Electrical " & _            "Engineering Department. Enclosed with this " & _            "letter is a booklet containing all the classes " & _            "offered next semester at State University.  " & _            "Several new classes will be offered in the " & _            "Electrical Engineering Department next semester.  " & _            "These classes are listed below."        wrdSelection.TypeText(StrToAdd)        InsertLines(2)        ' Insert a new table with 9 rows and 4 columns.        wrdDoc.Tables.Add(wrdSelection.Range, NumRows:=9, _             NumColumns:=4)        With wrdDoc.Tables.Item(1)            ' Set the column widths.            .Columns.Item(1).SetWidth(51, Word.WdRulerStyle.wdAdjustNone)            .Columns.Item(2).SetWidth(170, Word.WdRulerStyle.wdAdjustNone)            .Columns.Item(3).SetWidth(100, Word.WdRulerStyle.wdAdjustNone)            .Columns.Item(4).SetWidth(111, Word.WdRulerStyle.wdAdjustNone)            ' Set the shading on the first row to light gray.            .Rows.Item(1).Cells.Shading.BackgroundPatternColorIndex = _             Word.WdColorIndex.wdGray25            ' Bold the first row.            .Rows.Item(1).Range.Bold = True            ' Center the text in Cell (1,1).            .Cell(1, 1).Range.Paragraphs.Alignment = _                      Word.WdParagraphAlignment.wdAlignParagraphCenter            ' Fill each row of the table with data.            FillRow(wrdDoc, 1, "Class Number", "Class Name", "Class Time", _               "Instructor")            FillRow(wrdDoc, 2, "EE220", "Introduction to Electronics II", _                      "1:00-2:00 M,W,F", "Dr. Jensen")            FillRow(wrdDoc, 3, "EE230", "Electromagnetic Field Theory I", _                      "10:00-11:30 T,T", "Dr. Crump")            FillRow(wrdDoc, 4, "EE300", "Feedback Control Systems", _                      "9:00-10:00 M,W,F", "Dr. Murdy")            FillRow(wrdDoc, 5, "EE325", "Advanced Digital Design", _                      "9:00-10:30 T,T", "Dr. Alley")            FillRow(wrdDoc, 6, "EE350", "Advanced Communication Systems", _                      "9:00-10:30 T,T", "Dr. Taylor")            FillRow(wrdDoc, 7, "EE400", "Advanced Microwave Theory", _                      "1:00-2:30 T,T", "Dr. Lee")            FillRow(wrdDoc, 8, "EE450", "Plasma Theory", _                      "1:00-2:00 M,W,F", "Dr. Davis")            FillRow(wrdDoc, 9, "EE500", "Principles of VLSI Design", _                      "3:00-4:00 M,W,F", "Dr. Ellison")        End With        ' Go to the end of the document.        wrdApp.Selection.GoTo(Word.WdGoToItem.wdGoToLine, _                   Word.WdGoToDirection.wdGoToLast)        InsertLines(2)        ' Create a string and insert it into the document.        StrToAdd = "For additional information regarding the " & _                   "Department of Electrical Engineering, " & _                   "you can visit our Web site at "        wrdSelection.TypeText(StrToAdd)        ' Insert a hyperlink to the Web page.        wrdSelection.Hyperlinks.Add(Anchor:=wrdSelection.Range, _           Address:="http://www.ee.stateu.tld")        ' Create a string and insert it in the document.        StrToAdd = ".  Thank you for your interest in the classes " & _                   "offered in the Department of Electrical " & _                   "Engineering.  If you have any other questions, " & _                   "please feel free to give us a call at " & _                   "555-1212." & vbCr & vbCr & _                   "Sincerely," & vbCr & vbCr & _                   "Kathryn M. Hinsch" & vbCr & _                   "Department of Electrical Engineering" & vbCr        wrdSelection.TypeText(StrToAdd)        ' Perform mail merge.        wrdMailMerge.Destination = _                   Word.WdMailMergeDestination.wdSendToNewDocument        wrdMailMerge.Execute(False)        ' Close the original form document.        wrdDoc.Saved = True        wrdDoc.Close(False)        ' Release References.        wrdSelection = Nothing        wrdMailMerge = Nothing        wrdMergeFields = Nothing        wrdDoc = Nothing        wrdApp = Nothing        ' Clean up temp file.        System.IO.File.Delete("C:\DataDoc.doc")    End Sub					
  7. Adicione o seguinte para a parte superior do Form1.vb.
    Imports Microsoft.Office.Interop					
  8. Pressione F5 para criar e executar o programa.
  9. Clique em Button1 para iniciar a automação do Word e para executar a mala direta.
Referências
Para obter mais informações, visite o seguinte Microsoft Developer site Network (MSDN):
Microsoft Office Development com Visual Studio
http://msdn2.microsoft.com/en-us/library/aa188489(office.10).aspx
Para obter mais informações sobre o Word automatizando com o Microsoft Visual Basic 5.0 ou 6.0, clique no números abaixo para ler os artigos na Base de dados de Conhecimento da Microsoft:
285332Como automatizar o Word com o Visual Basic para criar uma mala direta
220607Como automatizar o Microsoft Word para executar a mala direta do Visual Basic
wd2003 wd2002 WD2007

Propriedades

ID do Artigo: 301656 - Última Revisão: 05/11/2007 22:28:34 - Revisão: 8.2

Microsoft Visual Basic .NET 2003 Standard Edition, Microsoft Visual Basic .NET 2002 Standard Edition, Microsoft Office Word 2007, Microsoft Office Word 2003, Microsoft Word 2002 Standard Edition

  • kbmt kbpia kbautomation kbhowto KB301656 KbMtpt
Comentários