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

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
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:
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 ExplicitPrivate Type InvoiceData    OrderID As String    OrderDate As Date    CustID As String    CustInfo As String    ProdInfo As VariantEnd TypePrivate m_Data As InvoiceDataPublic 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.CloseEnd SubPublic 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 = vArrayEnd SubPublic 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-lotMarkets Boise ID 83720USA</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.
Automatizando automatizar automação createobject msword 2000 2002 xp ie WD2003 WD2007

Aviso: este artigo foi traduzido automaticamente

Propriedades

ID do Artigo: 286023 - Última Revisão: 05/17/2007 03:50:48 - Revisão: 11.3

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

  • kbmt kbdownload kbautomation kbhowto KB286023 KbMtpt
Comentários