ID do artigo: 285176 - Última revisão: terça-feira, 23 de outubro de 2007 - Revisão: 8.1

Como automatizar o Word para executar uma mala direta do cliente usando o XML do SQL Server

Dica do SistemaEste artigo aplica-se a um sistema operativo diferente do que está a utilizar. Foi desactivado o conteúdo do artigo, que pode não ser relevante para si.

Nesta página

Expandir tudo | Recolher tudo

Sumário

Este artigo demonstra como automatizar o Microsoft Word de script do lado do cliente para executar uma mala direta para etiquetas. O Word não tem um método para usar dados XML como a fonte de dados para uma mala direto. O exemplo ilustra o Active Server Pages (ASP) código que transmite um conjunto de registros XML de um servidor Web para um cliente. Script do lado do cliente converte esses dados XML em um arquivo de texto delimitado que é local para o cliente e, em seguida, automatiza o Word para criar uma mala direta usando o arquivo de texto local como a fonte de dados de mala direta.

Mais Informações

ActiveX Data Objects (ADO) 2.5 e posterior permite que dados conjunto de registros a ser mantido no formato XML. Usando o ASP em um servidor Web, pode criar um recordset ADO de um banco de dados e retornar os dados como XML para seus clientes. Por sua vez, os clientes podem usar ADO para ler o conjunto de registros XML e manipular os dados conforme necessário. Consulte a seção "Referências" deste artigo para obter links para recursos adicionais como usar o ADO com XML.

Para fins de ilustração, o exemplo a seguir usa o banco de dados pubs de exemplo no Microsoft SQL Server. No entanto, o código semelhante pode ser usado para executar uma mala direta com qualquer banco de dados para o qual você pode fazer um ADO conexão.

Exemplo

  1. No seu servidor Web, crie um diretório virtual que é chamado WordMailMerge.
  2. Use o bloco de notas para criar um arquivo chamado Default.asp que contém o código fornecido abaixo. Salvar o arquivo para o diretório virtual WordMailMerge.
    <%@ Language=VBScript %>
    <HTML>
    <BODY>
    <SCRIPT LANGUAGE=VBScript>
    Sub CreateDataDoc(oApp)
      ' Declare variables.
      Dim sServer,oDoc,oRS,sTemp,sHead,oRange,oField
      
      ' Place your server's name here.
      sServer = "<servername>"
      ' Create a new document.
      Set oDoc = oApp.Documents.Add
      ' Create a new recordset.
      Set oRS = CreateObject("ADODB.Recordset")
      ' Open the XML recordset from the server
      oRS.Open "http://" & sServer & "/WordMailMerge/Getdata.asp"
      ' Convert the recordset to a string.
      sTemp = oRS.GetString(2, -1, vbTab)  ' 2 = adClipString
             
      ' Append the field names to the front of the string.
      For Each oField In oRS.Fields
        sHead = sHead & oField.Name & vbTab
      Next
            
      ' Strip off the last tab.
      sTemp = Mid(sHead, 1, Len(sHead) - 1) & vbCrLf & sTemp
             
      ' Get a range object and insert the text into the document.
      Set oRange = oDoc.Range
      oRange.Text = sTemp
      
      ' Convert the text to a table.
      oRange.ConvertToTable vbTab
      ' Save the document to a temp file.
      oDoc.SaveAs "C:\data.doc"
      ' Close the document (no save).
      oDoc.Close False
    End Sub
    
    
    Sub ButtonClick()
      Dim oApp
      Dim oDoc
      Dim oMergedDoc
      
      ' Create an instance of Word.     
      Set oApp = CreateObject("Word.Application")
     
      ' Create our data file.
      CreateDataDoc oApp
      
      ' Add a new document.
      Set oDoc = oApp.Documents.Add
      With oDoc.MailMerge
        ' Add our fields.
        .Fields.Add oApp.Selection.Range, "au_fname"
        oApp.Selection.TypeText " "
        .Fields.Add oApp.Selection.Range, "au_lname"
        oApp.Selection.TypeParagraph
        .Fields.Add oApp.Selection.Range, "city"
        oApp.Selection.TypeText ", "
        .Fields.Add oApp.Selection.Range, "state"
        oApp.Selection.TypeParagraph
        .Fields.Add oApp.Selection.Range, "zip"
        oApp.Selection.TypeParagraph
               
        ' Create an autotext entry.
        Dim oAutoText
        Set oAutoText = oApp.NormalTemplate.AutoTextEntries.Add _
        ("MyLabelLayout", oDoc.Content)
        oDoc.Content.Delete
        .MainDocumentType = 1  ' 1 = wdMailingLabels
             
        ' Open the saved data source.
        .OpenDataSource "C:\data.doc"
    
        ' Create a new document.
        oApp.MailingLabel.CreateNewDocument "5160", "", _
             "MyLabelLayout", , 4  ' 4 = wdPrinterManualFeed
    
        .Destination = 0  ' 0 = wdSendToNewDocument
        ' Execute the mail merge.
        .Execute
    
        oAutoText.Delete
      End With
           
      ' Close the mail merge edit document.
      oDoc.Close False
      ' Get the current document.
      Set oMergedDoc = oApp.ActiveDocument
      ' Show Word to the user.
      oApp.Visible = True
      
      ' Uncomment these lines to save the merged document locally.
      'oMergedDoc.SaveAs "C:\test.doc"
      'oMergedDoc.Close False
      'oApp.Quit False
    End Sub
    </SCRIPT>
    <INPUT type=button value="Create Word Document" onclick="VBScript:ButtonClick">
    </BODY>
    </HTML>
    					
  3. Use o bloco de notas para criar um arquivo chamado getdata.asp que contém o código fornecido abaixo. Salvar o arquivo para o diretório virtual WordMailMerge.
    <%@ Language=VBScript %>
    <%
      Dim oConn,oRS,strConn,sSQLServer
      
      ' Build the connection string. Replace <username> and <strong password> with
      ' the username and password of an account that has permissions on the database.
      sSQLServer = "<servername>"
      strConn = "Provider=SQLOLEDB.1;Persist Security Info=False;" & _
                "User ID=<username>;Password=<strong password>;Initial Catalog=pubs;Data Source=" & sSQLServer
      ' Set our return content type.
      Response.ContentType = "text/xml"
      
      ' Create a connection.
      set oConn = Server.CreateObject("ADODB.Connection")
      ' Open the connection.
      oConn.Open strConn
      ' Execute the SQL statement.
      set oRS = oConn.Execute(?SELECT * FROM AUTHORS?)
      ' Save the recordset in the Response object.
      oRS.Save Response,1
    %>
    					
  4. Alterar a variável sServer default.asp para apontar para o servidor Web e alterar a variável sSQLServer getdata.asp para apontar para o SQL Server.
  5. Inicie o Internet Explorer e navegue até http:// < nome_do_servidor > /WordMailMerge/Default.asp(WHERE < nome_do_servidor > é o nome do seu servidor Web).
  6. Clique no botão na página da Web para automatizar o Word e executar a mala direta. Quando automação for concluída, o Word aparece com um novo documento que contém as etiquetas de endereçamento que resultou da mala direta.

Referências

Para obter mais informações, clique nos números abaixo para ler os artigos na Base de dados de Conhecimento da Microsoft:
195826  (http://support.microsoft.com/kb/195826/ ) CreateObject Falha de scripts do lado do cliente
258512  (http://support.microsoft.com/kb/258512/ ) Como automatizar o Word a partir do Visual Basic para criar uma mala direta para etiquetas de endereçamento
278260  (http://support.microsoft.com/kb/278260/ ) Como usar o Microsoft Foundation Classes (MFC) para automatizar o Word e criar uma mala direta para etiquetas de endereçamento
263247  (http://support.microsoft.com/kb/263247/ ) Como obter um conjunto de registros ADO do XML
252767  (http://support.microsoft.com/kb/252767/ ) Como obter a representação XML de um conjunto de registros ADO no Visual Basic

A informação contida neste artigo aplica-se a:
  • Microsoft Office Word 2007
  • Microsoft Office Word 2003
  • Microsoft Word 2000 Standard Edition
  • Microsoft ActiveX Data Objects 2.6
  • Microsoft ActiveX Data Objects 2.5
  • Microsoft Active Server Pages 4.0
Palavras-chave: 
kbmt kbmerge kbexpertiseinter kbautomation kbhowto KB285176 KbMtpt
Tradução automáticaTradução automática
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: 285176  (http://support.microsoft.com/kb/285176/en-us/ )