Como usar um componente ActiveX VB para automação do Word do Internet Explorer

Traduções deste artigo Traduções deste artigo
ID do artigo: 286023 - Exibir os produtos aos quais esse artigo se aplica.
Expandir tudo | Recolher tudo

Neste artigo

Sumário

Este artigo demonstra como você pode usar um ActiveX componente para o lado do cliente automação do Word de uma página da Web que é processada no Internet Explorer. Há vários benefícios para usar um componente ActiveX de uma página da Web em vez de script que está embutido na própria página da Web:
  • Se você já tiver código do Visual Basic que automatiza o Microsoft Word, você pode reutilizar o código no navegador, convertendo seu projeto Visual Basic um EXE ActiveX ou uma DLL ActiveX.
  • O Word não está marcado seguro para script. Dependendo das configurações de segurança no Internet Explorer, não poderá ser executado código de automação do Word no script ou o usuário pode ser solicitado um aviso de segurança. Supondo que o componente ActiveX atende a determinadas diretrizes, ele pode estar marcado seguros para script para evitar esses problemas de segurança.
  • Visual Basic possui diversos recursos que não é possível usar com script em uma página da Web. Por exemplo, um recurso que está disponível para Visual Basic, mas não para o script de página da Web é a capacidade de chamar a interface de programação de aplicativo (API) do Windows.
Um cenário de desenvolvedor comum é apresentar aos usuários uma interface de página da Web para criar um documento do Word usando dados de alguma origem externa ou lógica. Embora você possa usar automação do Word lado do servidor para gerar o documento e o fluxo de volta para o cliente, existem muitos desvantagens em usar uma abordagem de servidor que envolve a automação do Word. A principal desvantagem é escalabilidade; Word é um servidor de automação muito de recursos intensivos e não é recomendado para geração de documento no servidor Web.

Usando um componente ActiveX para executar a geração de documento no cliente, você pode mover a automação do Word uso intensivo de recursos fora do servidor Web. Isso é a solução apresentada pelo componente ActiveX exemplo descrita neste artigo. Embora o exemplo seja específico para automação do Word, os mesmos princípios podem ser aplicados para automatizar outro Microsoft Office aplicativos, como o Microsoft Excel.

Mais Informações

Baixe o exemplo

AutoWord.exe contém projeto Visual Basic ActiveX DLL, Word documentos e páginas da Web que são descritas neste artigo.

O seguinte arquivo está disponível para download no Centro de download da Microsoft:
Autoword.exe
Data de lançamento: 17 de abril de 2001

Para obter informações adicionais sobre como baixar arquivos de suporte da Microsoft, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
119591Como obter arquivos de suporte da Microsoft a partir de serviços online
Microsoft examinou esse arquivo em busca de vírus. Microsoft utilizou o mais recente software de detecção de vírus que estava disponível na data em que o arquivo foi publicado. O arquivo é armazenado em servidores com segurança avançada que ajudam a evitar qualquer alteração não autorizada no arquivo.

Configurar o exemplo

Depois de fazer o download Autoword.exe, execute estas etapas para configurar o exemplo:
  1. Crie uma pasta chamada fatura no diretório raiz virtual do seu servidor Web. (O diretório raiz virtual padrão é C:\inetpub\wwwroot.)
  2. Extrair os arquivos em Autoword.exe para a fatura pasta.
  3. Abra Autoword1.htm em um texto ou no editor de HTML e substituir referências para YourWebServer em todas as URLs com o nome do seu servidor Web. Da mesma forma, substitua YourSQLServer na seqüência de conexão pelo nome do seu SQL Server que contém o banco de dados de exemplo Northwind.

    Observação : se você não tem um SQL Server disponível com o Northwind, banco de dados de exemplo, você pode modificar a seqüência de conexão para usar o banco de dados de exemplo Northwind do Microsoft Access em vez disso. Uma conexão para o Access Northwind banco de dados de exemplo semelhante à seguinte:
    sConn = "provider=microsoft.jet.oledb.4.0; data source=" & _
            "C:\Program Files\Microsoft Office\Office10\Samples\Northwind.mdb"
    					
  4. Abra Autoword2.htm em um texto ou no editor de HTML e substituir referências para YourWebServer em todas as URLs com o nome do seu servidor Web.
  5. Inicie o Internet Explorer. Você pode procurar http://YourWebServer/invoice/AutoWord1.htm e http://YourWebServer/invoice/AutoWord2.htm para testar o script. Quando você visita qualquer uma dessas páginas primeiro, você precisará fazer o download do ActiveX componente.
O componente do ActiveX do Visual Basic de exemplo e script são descritos mais detalhadamente nas seções a seguir.

Componente do Visual Basic ActiveX

O componente de Visual Basic ActiveX neste exemplo interage com script de página da Web para gerar um documento de nota fiscal de ordem de pedido do usuário. O aplicativo Web pode permitir que o componente ActiveX para obter informações de uma identificação de ordem determinada ordem ou o aplicativo da Web poderá optar por compactar as informações do pedido como XML e enviá-lo para o componente ActiveX para processamento. Em ambos os casos, após o componente obtém as informações da ordem, pode automatizar o Word para criar e exibir o documento de nota fiscal para a ordem.

O componente ActiveX ( AutomateWord ) contém uma classe única, a classe de Fatura , que expõe três métodos:
  • O método GetData usa ActiveX Data Objects (ADO) para extrair informações sobre um pedido no banco de dados de exemplo Northwind. As informações da ordem são armazenadas na variável membro privado m_Data . O método GetData pode ser chamado para permitir que a extração de dados ocorrem no lado do cliente.
  • O método SendData usa o Microsoft XML (MSXML) para preencher a variável de membro privado m_Data com as informações de ordem que forneceu pelo chamador. SendData espera um parâmetro que representa um objeto DOMDocument para as informações da ordem. O método SendData pode ser chamado para enviar as informações da ordem de página da Web para o componente. Com essa abordagem, você pode usar ASP para extrair o dados de servidor e apresentar o cliente com uma ilha de dados XML que pode ser usada para a geração de documento.
  • O método MakeInvoice usa automação do Word para criar um documento que contém informações de ordem da variável de membro privado m_Data . Um documento que é armazenado na Web servidor é usado como um ponto de partida para a nota fiscal. O chamador pode optar por exibir o documento do Word concluído fora do navegador ou salvar o documento concluído em um disco para uso posterior.
Invoice.CLS
Option Explicit

Private Type InvoiceData
    OrderID As String
    OrderDate As Date
    CustID As String
    CustInfo As String
    ProdInfo As Variant
End Type

Private m_Data As InvoiceData

Public Sub GetData(sOrderID As Variant, sConn As Variant)

    Dim oConn As Object, oRS As Object
    
    'Connect to the Northwind database.
    Set oConn = CreateObject("ADODB.Connection")
    oConn.Open sConn
    
    'Obtain the Customer ID and Order Date.
    Set oRS = CreateObject("ADODB.Recordset")
    oRS.Open "Select [OrderDate], [CustomerID] from Orders where " & _
             "[OrderID]=" & sOrderID, oConn, 3 'adOpenStatic=3
    m_Data.OrderID = sOrderID
    m_Data.OrderDate = CDate(oRS.Fields("OrderDate").Value)
    m_Data.CustID = oRS.Fields("CustomerID").Value
    oRS.Close
    
    'Obtain Customer information.
    Set oRS = CreateObject("ADODB.Recordset")
    oRS.Open "Select * from Customers Where CustomerID='" & _
             m_Data.CustID & "'", oConn, 3 'adOpenStatic=3
    m_Data.CustInfo = oRS.Fields("CompanyName").Value & vbCrLf & _
                      oRS.Fields("City") & " "
    If Not (IsNull(oRS.Fields("Region"))) Then
       m_Data.CustInfo = m_Data.CustInfo & oRS.Fields("Region").Value & " "
    End If
    m_Data.CustInfo = m_Data.CustInfo & oRS.Fields("PostalCode").Value & _
                      vbCrLf & oRS.Fields("Country").Value
    oRS.Close
    
    'Obtain Product information.
    Set oRS = CreateObject("ADODB.Recordset")
    oRS.Open "Select ProductName, Quantity, [Order Details].UnitPrice," & _
             "Discount from Products Inner Join [Order Details] on " & _
             "Products.ProductID = [Order Details].ProductID " & _
             "Where OrderID = " & sOrderID, oConn, 3 'adOpenStatic=3
    m_Data.ProdInfo = oRS.GetRows
    oRS.Close
    
    'Close the connection to the database.
    oConn.Close

End Sub

Public Sub SendData(oXML As Variant)

    'Extract the information from the DOMDocument object oXML and store
    'it in the private member variable m_Data.

    m_Data.OrderID = oXML.getElementsByTagName("OrderID").Item(0).Text
    m_Data.OrderDate = oXML.getElementsByTagName("OrderDate").Item(0).Text
    m_Data.CustID = oXML.getElementsByTagName("CustID").Item(0).Text
    m_Data.CustInfo = oXML.getElementsByTagName("CustInfo").Item(0).Text
    
    Dim oItems As Object, oItem As Object
    Set oItems = oXML.getElementsByTagName("Items").Item(0)
    ReDim vArray(0 To 3, 0 To oItems.childNodes.Length - 1) As Variant
    Dim i As Integer
    For i = 0 To UBound(vArray, 2)
        Set oItem = oItems.childNodes(i)
        vArray(0, i) = oItem.getAttribute("Desc")
        vArray(1, i) = oItem.getAttribute("Qty")
        vArray(2, i) = oItem.getAttribute("Price")
        vArray(3, i) = oItem.getAttribute("Disc")
    Next
    m_Data.ProdInfo = vArray

End Sub

Public Sub MakeInvoice(sTemplate As Variant, Optional bSave As Variant)
    
    Dim oWord As Object
    Dim oDoc As Object
    Dim oTable As Object
    
    If IsMissing(bSave) Then bSave = False

    'Open the document as read-only.
    Set oWord = CreateObject("Word.Application")
    Set oDoc = oWord.Documents.Open(sTemplate, , True)
    
    'Fill in the bookmarks.
    oDoc.Bookmarks("Customer_Info").Range.Text = m_Data.CustInfo
    oDoc.Bookmarks("Customer_ID").Range.Text = m_Data.CustID
    oDoc.Bookmarks("Order_ID").Range.Text = m_Data.OrderID
    oDoc.Bookmarks("Order_Date").Range.Text = m_Data.OrderDate
    
    'Fill in the table with the product information.
    '** Note that the table starts out with three rows -- the first row
    '   contains headers for the table, the second row is for
    '   the first set of product data, and the third row contains a total.
    '   New rows are added for additional products before the "total row".

    Set oTable = oDoc.Tables(1)
    Dim r As Integer, c As Integer
    For r = 1 To UBound(m_Data.ProdInfo, 2) + 1
        If r > 1 Then oTable.Rows.Add (oTable.Rows(oTable.Rows.Count))
        For c = 1 To 4
            oTable.Cell(r + 1, c).Range.Text = _
               m_Data.ProdInfo(c - 1, r - 1)
        Next
        oTable.Cell(r + 1, 5).Formula _
            "=(B" & r + 1 & "*C" & r + 1 & ")*(1-D" & r + 1 & ")", _
            "#,##0.00"
    Next

    'Update the field for the grand total and protect the document.
    oTable.Cell(oTable.Rows.Count, 5).Range.Fields.Update
    oDoc.Protect 1 'wdAllowOnlyComments=1
        
    If bSave Then
        'Save the document as "c:\invoice.doc" and quit Word.
        Dim nResult As Long
        nResult = MsgBox("Are you sure you wish to create the document" & _
             " ""c:\invoice.doc""? If this document already exists, " & _
             "it will be replaced", vbYesNo, "AutomateWord")
        If nResult = vbYes Then oDoc.SaveAs "c:\invoice.doc"
        oDoc.Close False
        oWord.Quit
    Else
        'Make Word visible.
        oWord.Visible = True
    End If
    
End Sub
				

Usando o componente ActiveX de uma página da Web

Autoword1.htm demonstra como você pode usar o método GetData para permitir que o componente ActiveX recuperar o ordem de dados do cliente e criar o documento.

Autoword1.htm
<HTML>
<HEAD>
   <OBJECT ID="AutoWord"
    CLASSID="CLSID:32646EBA-0919-4C2F-94D6-599F46DC34F2"
    CODEBASE="http://YourWebServer/invoice/package/AutomateWord.CAB#version=1,0,0,0">
   </OBJECT>
</HEAD>
<BODY>
Enter an order id between 10248 and 11077 and click the button to view the invoice for the order:
<P/><INPUT TYPE="text" VALUE="10500" ID="OrderID">
<P/><BUTTON ID="InvoiceButton">Create Invoice</BUTTON>
</BODY>

<SCRIPT Language="VBScript">

   Function InvoiceButton_OnClick()
      Dim sConn
      sConn = "Provider=sqloledb;Data Source=YourSQLServer;Initial Catalog=Northwind;UID=sa;"
      AutoWord.GetData OrderID.Value, sConn
      AutoWord.MakeInvoice "http://YourWebServer/invoice/invoice.doc"
   End Function

</SCRIPT>
</HTML>
				
o script em Autoword1.htm usa o componente ActiveX para exibir o documento concluído fora do navegador. Você também pode optar por salvar o documento concluído e exibi-lo no navegador; no entanto, ao fazer isso tão requer que o documento do Word seja salva em um disco. O componente pode salvar o documento como C:\Invoice.doc na unidade local do cliente. Porque o componente ActiveX está marcado como seguro para script, o cliente é solicitado a confirmar a gravação.

Se você desejar exibir o documento concluído no navegador, altere a MakeInvoice em Autoword1.htm chamada para o seguinte: Autoword2.htm
      AutoWord.MakeInvoice "http://YourWebServer/invoice/invoice.doc", True
      window.navigate "c:\invoice.doc"
				
demonstra como você pode usar o método SendData para enviar os dados ordem como um objeto DOMDocument para o componente ActiveX para gerar o documento concluído. DOMDocument é criado a partir uma ilha de dados do XML reside na página da Web. Para o componente ActiveX processar corretamente as informações de ordem que são enviadas pelo chamador, o XML deve ser bem formado e estruturado para que o componente pode interpretá-lo como informações do pedido.

Autoword2.htm
<HTML>
<HEAD>
   <OBJECT ID="AutoWord"
    CLASSID="CLSID:32646EBA-0919-4C2F-94D6-599F46DC34F2"
    CODEBASE="http://YourWebServer/invoice/package/AutomateWord.CAB#version=1,0,0,0">
   </OBJECT>
</HEAD>
<BODY>
   <BUTTON ID="InvoiceButton">Create Invoice</BUTTON>
   <XML ID="DataXML">
     <Order>
        <OrderID>10700</OrderID>
        <OrderDate>10/10/2000</OrderDate>
        <CustID>SAVEA</CustID>
        <CustInfo>Save-a-lot
Markets Boise ID 83720
USA</CustInfo>
        <Items>
           <Product Desc="Chai" Qty="5" Price="18" Disc="0.2"/>
           <Product Desc="Sasquatch Ale" Qty="12" Price="14" Disc="0.2"/>
           <Product Desc="Scottish Longbreads" Qty="40" Price="12.5" Disc="0.2"/>
           <Product Desc="Flotemysost" Qty="60" Price="21.5" Disc="0.2"/>
        </Items>        
     </Order>
   </XML>
</BODY>

<SCRIPT Language="VBScript">
  
   Function InvoiceButton_OnClick()
      AutoWord.SendData DataXML.XMLDocument
      AutoWord.MakeInvoice "http://YourWebServer/invoice/invoice.doc"
   End Function

</SCRIPT>
</HTML>
				
no Autoword1.htm e Autoword2.htm, você deve observar que o componente ActiveX é instanciado por meio de uma marca <object> em vez dafunção CreateObject . O objetivo de usar a marca <object> é permitir download automático do componente ActiveX para usuários que ainda não tiver o componente instalado. Se um usuário visitar um dessas páginas e o componente não está instalado, o componente é baixado do arquivo de gabinete (CAB) na URL que é indicado noatributo CODEBASE . Dependendo das configurações de segurança do usuário no Internet Explorer, primeiro eles podem receber uma solicitação para confirmar o download.

Observação : arquivo CAB A incluída no Autoword.exe foi criado com o Package and Deployment Wizard para o Visual Basic. O componente ActiveX no pacote está marcado como seguro para inicialização e script, mas não está assinado digitalmente.

Para obter mais informações sobre criação de downloads de componentes do Internet, a assinatura digital e marcação componentes como seguro para script e a inicialização, consulte os seguintes sites da Microsoft Developer Network (MSDN):
Assinando e verificando códigos com Authenticode
http://msdn2.microsoft.com/en-us/library/ms537364.aspx

Inicialização segura e scripts para controles ActiveX
http://msdn2.microsoft.com/en-us/library/Aa751977.aspx

Referências

Para obter informações adicionais, clique nos números abaixo para ler os artigos na Base de dados de Conhecimento da Microsoft:
257757INFO: A automação do Office para a execução automática é suportado ou não recomendável
270906Como usar o ASP para gerar um documento do Rich Text Format (RTF) para fluxo para o Microsoft Word
(c) Microsoft Corporation 2001, todos os direitos reservados. Contribuições de Lori B. Turner, Microsoft Corporation.

Propriedades

ID do artigo: 286023 - Última revisão: quinta-feira, 17 de maio de 2007 - Revisão: 11.3
A informação contida neste artigo aplica-se a:
  • Microsoft Office Word 2007
  • Microsoft Office Word 2003
  • Microsoft Word 2002 Standard Edition
  • Microsoft Word 2000 Standard Edition
  • Visual Basic, Scripting Edition 5.0
  • Microsoft Visual Basic 6.0 Professional Edition
  • Microsoft Internet Explorer 5.0
  • Microsoft Internet Explorer 5.01
  • Microsoft Internet Explorer 5.5
Palavras-chave: 
kbmt kbdownload kbautomation kbhowto KB286023 KbMtpt
Traduçã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: 286023

Submeter comentários

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com