Como utilizar um componente ActiveX VB para automatização do Word a partir do Internet Explorer

Traduções de Artigos Traduções de Artigos
Artigo: 286023 - Ver produtos para os quais este artigo se aplica.
Expandir tudo | Reduzir tudo

Nesta página

Sumário

Este artigo demonstra como pode utilizar ActiveX um componente do lado do cliente automatização do Word de uma página Web que é apresentada no Internet Explorer. Existem várias vantagens em utilizar um componente ActiveX a partir de uma página Web em vez de script que está incorporado na própria página Web:
  • Se já tiver código do Visual Basic que automatiza o Microsoft Word, pode reutilizar o código no browser, convertendo o projecto do Visual Basic para um EXE ActiveX ou uma DLL de ActiveX.
  • Word não está marcado como seguro para processamento de scripts. Consoante as definições de segurança no Internet Explorer, código de automatização do Word no script poderá não funcionar ou o utilizador poderá ser solicitado um aviso de segurança. Assinalado como partindo do princípio que o componente ActiveX cumpre determinadas directrizes, pode ser sendo seguro para processamento de scripts para evitar estes problemas de segurança.
  • Visual Basic tem várias funcionalidades que não pode ser utilizada com scripts numa página Web. Por exemplo, uma funcionalidade que está disponível para o Visual Basic mas não ao script da página Web é a capacidade para chamar a interface de programação de aplicações do Windows (API).
Um cenário de programação comum consiste em apresentar aos utilizadores com uma interface de página Web para criar um documento do Word utilizando dados de algum origem externa ou lógica. Apesar de poder utilizar automatização do Word lado do servidor para gerar o documento e a sequência novamente para o cliente, existem várias desvantagens a utilizar uma abordagem do lado do servidor que envolve a automatização do Word. A principal desvantagem é escalabilidade; o Word é um servidor de automatização muito intensiva do recurso e não se recomenda a geração de documentos no servidor Web.

Utilizando um componente ActiveX para efectuar a geração de documentos no cliente, pode mover a automatização do Word que consome muitos recursos fora do servidor Web. Esta é a solução apresentada pelo componente ActiveX exemplo abordada neste artigo. Embora o exemplo seja específico de automatização do Word, serão aplicados os mesmos princípios para automatizar outros Microsoft Office aplicações, tais como o Microsoft Excel.

Mais Informação

Transferir o exemplo

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

O ficheiro seguinte está disponível para transferência a partir do Centro de transferências da Microsoft:
Autoword.exe
Data de edição: 17 de Abril de 2001

Para obter informações adicionais sobre como transferir ficheiros de suporte da Microsoft, clique no número de artigo que se segue para visualizar o artigo na Microsoft Knowledge Base:
119591Como obter ficheiros de suporte da Microsoft a partir de serviços on-line
Microsoft procedeu de vírus neste ficheiro. Microsoft utilizou o mais recente software de detecção de vírus que estava disponível na data em que o ficheiro foi publicado. O ficheiro é alojado em servidores com segurança avançada que o ajudam a impedir alterações não autorizadas ao ficheiro.

Configurar o exemplo

Depois de transferir autoword.exe, siga estes passos para configurar o exemplo:
  1. Crie uma pasta denominada factura no directório virtual raiz do servidor Web. (O directório de raiz virtual predefinido é C:\Inetpub\Wwwroot.)
  2. Extrair os ficheiros em autoword.exe para a factura pasta.
  3. Abra Autoword1.htm num editor de HTML ou texto e substituir as referências a YourWebServer em todos os URLs com o nome do servidor Web. Do mesmo modo, substitua YourSQLServer na cadeia de ligação com o nome do SQL Server que contém a base de dados de exemplo Adamastor.

    Nota : Se não tiver um SQL Server disponíveis com a base de dados de exemplo, pode modificar a cadeia de ligação para utilizar a base de dados de exemplo Adamastor do Microsoft Access em vez disso. Uma ligação para o Adamastor do Access base de dados de exemplo semelhante o seguinte:
    sConn = "provider=microsoft.jet.oledb.4.0; data source=" & _
            "C:\Program Files\Microsoft Office\Office10\Samples\Northwind.mdb"
    					
  4. Abra Autoword2.htm num editor de HTML ou texto e substituir as referências a YourWebServer em todos os URLs com o nome do servidor Web.
  5. Inicie o Internet Explorer. Pode procurar http://YourWebServer/invoice/AutoWord1.htm e http://YourWebServer/invoice/AutoWord2.htm para testar o script. Quando visitar pela primeira vez qualquer uma destas páginas, é solicitada para transferir o ActiveX do componente.
O componente do ActiveX do Visual Basic de exemplo e o script são descritos mais detalhadamente nas secções que se seguem.

Componente ActiveX do Visual Basic

O componente de Visual Basic ActiveX neste exemplo interage com script da página Web para gerar um documento de factura de ordem de pedido do utilizador. A aplicação da Web pode permitir que o componente ActiveX obter informações ordem um ID de ordem ou a aplicação da Web poderá optar por compactar as informações de ordem como XML e envie-o componente ActiveX para processar. Em qualquer dos casos, depois do componente obtém as informações de ordem, pode automatizar o Word para criar e apresentar o documento de factura para a ordem.

O componente ActiveX ( AutomateWord ) contém uma única classe, a classe de factura , que expõe os três métodos:
  • O método GetData utiliza ActiveX Data Objects (ADO) para extrair informações sobre uma encomenda na base de dados de exemplo Adamastor. A informação de encomenda é armazenada na variável de membro privado m_Data . Pode ser chamado o método GetData para permitir que a extracção de dados ocorrem no cliente.
  • O método SendData utiliza o Microsoft XML (MSXML) para preencher a variável de membro privado m_Data com as ordem as informações fornecidas pelo autor da chamada. SendData espera um parâmetro que representa um objecto de ' DOMDocument ' para as informações de ordem. Pode ser chamado o método SendData enviar as informações encomenda a partir da página Web para o componente. Com esta abordagem, pode utilizar o ASP para extrair dados lado do servidor e apresentar o cliente com um grupo de dados XML que pode ser utilizado para a geração de documentos.
  • O método MakeInvoice utiliza automatização do Word para criar um documento que contém as informações de ordem na variável de membro privado m_Data . Um documento que está armazenado na Web servidor é utilizado como ponto de partida para a factura. O autor da chamada pode optar por mostrar documento do Word concluído fora do browser ou guardar o documento concluído um disco para utilização 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
				

Utilizar o componente ActiveX de uma página Web

Autoword1.htm demonstra como pode utilizar do método GetData para permitir que o componente ActiveX obter a ordem de dados de 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 Autoword1.htm utiliza o componente ActiveX para apresentar o documento concluído fora do browser. Pode também escolher guardar o documento concluído e apresentá-lo no browser; no entanto, se o fizer, requer que o documento ser guardado num disco. O componente pode guardar o documento como C:\Invoice.doc na unidade local do cliente. Uma vez que o componente ActiveX está marcado como seguro para processamento de scripts, o cliente é pedido para confirmar a guardar.

Se pretender visualizar o documento concluído no browser, altere a chamada para MakeInvoice em Autoword1.htm à seguinte:
      AutoWord.MakeInvoice "http://YourWebServer/invoice/invoice.doc", True
      window.navigate "c:\invoice.doc"
				
Autoword2.htm demonstra como pode utilizar o método SendData para enviar os dados da ordem como um objecto de ' DOMDocument ' para o componente ActiveX para gerar o documento concluído. O ' DOMDocument ' é criada a partir de um grupo de dados XML que reside numa página Web. Para o componente ActiveX processar correctamente as informações de ordem que enviadas pelo autor da chamada, o XML tem de estar correctamente formado e estruturados para que o componente pode interpretar como informações sobre encomendas.

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, deve de note que o componente ActiveX é instanciado através de uma marca de <object> em vez defunção CreateObject . O objectivo de utilizar a guia <object> é activar transferência automática do componente ActiveX para utilizadores que ainda não tiver o componente instalado. Se um utilizador visita um de nestas páginas e o componente não está instalado, o componente é transferido do cab (CAB) ficheiro no URL que é indicado naatributo CODEBASE . Dependendo das definições de segurança do utilizador no Internet Explorer, podem primeiro receber um pedido para confirmar a transferência.

Nota : ficheiro CAB A que está incluído 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 scripts, mas não está assinado digitalmente.

Para obter mais informações sobre como criar o componente de transferências da Internet, assinatura digital e marcar componentes como seguro para processamento de scripts e inicialização, consulte os seguintes Web sites da Microsoft Developer Network (MSDN):
Assinatura e verificação de código com assinatura Authenticode
http://msdn2.microsoft.com/en-us/library/ms537364.aspx

Segurança inicialização e scripts para controlos ActiveX
http://msdn2.microsoft.com/en-us/library/Aa751977.aspx

Referências

Para obter informações adicionais, clique números de artigo que se seguem para visualizar os artigos na base de dados de conhecimento da Microsoft:
257757INFO: A automatização do Office para a execução automática é não recomendado ou suportado
270906Como utilizar o ASP para gerar um documento de Format (RTF) Rich Text (RTF) para transmissão em sequência para o Microsoft Word
(c) Microsoft Corporation 2001, todos os direitos reservados. Contribuições de Lori B. Turner, Microsoft Corporation.

Propriedades

Artigo: 286023 - Última revisão: 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 revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes 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