L'utilizzo di un componente ActiveX VB per l'automazione di Word da Internet Explorer

Traduzione articoli Traduzione articoli
Identificativo articolo: 286023 - Visualizza i prodotti a cui si riferisce l?articolo.
Espandi tutto | Chiudi tutto

In questa pagina

Sommario

In questo articolo viene illustrato come utilizzare ActiveX in un componente per il lato client automazione di Word da una pagina Web cui viene eseguito il rendering in Internet Explorer. Esistono diversi vantaggi all'utilizzo di un componente ActiveX da una pagina Web invece di script incorporato nella stessa pagina Web:
  • Se si dispone giÓ di codice Visual Basic che consente di automatizzare Microsoft Word, Ŕ possibile riutilizzare il codice nel browser convertendo il progetto di Visual Basic a un file EXE ActiveX o una DLL ActiveX.
  • Word non contrassegnato come sicuro per la creazione di script. In base alle impostazioni di protezione in Internet Explorer, codice di automazione di Word in script potrebbe non essere eseguita o all'utente potrebbe essere richiesto un avviso di protezione. Supponendo che il componente ActiveX soddisfa determinate indicazioni, essere impostato come sicuri per lo script per evitare questi problemi di protezione.
  • Visual Basic dispone di diverse funzionalitÓ che non Ŕ possibile utilizzare con script in una pagina Web. Ad esempio, una funzionalitÓ che Ŕ disponibile in Visual Basic, ma non allo script di pagina Web Ŕ la possibilitÓ di chiamare il Windows application programming interface (API).
Uno scenario di sviluppo comuni Ŕ per presentare agli utenti con un'interfaccia pagina Web per la creazione un documento di Word utilizzando i dati a un origine dati esterna o logica. Sebbene sia possibile utilizzare sul lato server, automazione di Word per generare il documento e nuovamente al client di flusso, esistono alcuni svantaggi molti all'utilizzo di un approccio lato server che prevede l'automazione di Word. Lo svantaggio principale Ŕ di scalabilitÓ, Word Ŕ un server di automazione intensivo delle risorse e non Ŕ consigliata per la generazione documento sul server Web.

Utilizza un componente ActiveX per eseguire la generazione del documento nel client, Ŕ possibile spostare l'automazione di Word intensivo di risorse all'esterno del server Web. Questa Ŕ la soluzione presentata dal componente ActiveX esempio descritto in questo articolo. Sebbene l'esempio sia specifico di automazione di Word, Ŕ possono applicare gli stessi principi per l'automazione altri Microsoft Office applicazioni, ad esempio Microsoft Excel.

Informazioni

Scaricare il codice di esempio

AutoWord.exe contiene il progetto DLL ActiveX in Visual Basic, Word documenti e pagine Web che sono descritte in questo articolo.

Il seguente file Ŕ disponibile per il download dall'Area download Microsoft:
Autoword.exe
Data di rilascio: 17 aprile 2001

Per ulteriori informazioni su come scaricare file di supporto Microsoft, fare clic sul numero dell'articolo della Microsoft Knowledge Base riportato di seguito riportato:
119591Come ottenere file di supporto Microsoft dai servizi online
Microsoft analizzati questo file per individuare eventuali virus. Microsoft ha utilizzato il software antivirus pi¨ recente disponibile alla data di pubblicazione del file. Il file Ŕ archiviato in server con protezione avanzata per impedire modifiche non autorizzate al file.

Impostare l'esempio

Dopo avere scaricato autoword.exe, attenersi alla seguente procedura per impostare l'esempio:
  1. Creare una cartella denominata fattura nella directory principale virtuale del server Web. (La cartella virtuale principale predefinita Ŕ C:\Inetpub\Wwwroot).
  2. Estrarre i file in autoword.exe per la fattura di cartella.
  3. Aprire Autoword1.htm in un testo o l'editor HTML e sostituire i riferimenti a YourWebServer in tutti gli URL con il nome del server Web. Analogamente, sostituire YourSQLServer nella stringa di connessione con il nome di SQL Server che contiene il database di esempio Northwind.

    Nota : se non Ŕ necessario un server SQL disponibili con Northwind database di esempio, Ŕ possibile modificare la stringa di connessione per utilizzare invece il database di esempio di Northwind di Microsoft Access. Una connessione a Northwind di Access database di esempio simile al seguente:
    sConn = "provider=microsoft.jet.oledb.4.0; data source=" & _
            "C:\Program Files\Microsoft Office\Office10\Samples\Northwind.mdb"
    					
  4. Aprire Autoword2.htm in un testo o l'editor HTML e sostituire i riferimenti a YourWebServer in tutti gli URL con il nome del server Web.
  5. Avviare Internet Explorer. ╚ possibile passare a http://YourWebServer/invoice/AutoWord1.htm e http://YourWebServer/invoice/AutoWord2.htm per verificare lo script. Quando si visita prima uno di tali pagine, viene richiesto di scaricare ActiveX componente.
Il componente ActiveX di Visual Basic di esempio e la script sono descritti in dettaglio in sezioni che seguono.

Componente ActiveX di Visual Basic

Il componente ActiveX di Visual Basic di questo esempio si interagisce con script della pagina Web per generare un documento della fattura di ordine su richiesta dell'utente. L'applicazione Web pu˛ consentire il componente ActiveX ottenere informazioni per un ID ordine determinato ordine oppure l'applicazione Web possibile includere le informazioni dell'ordine come XML e inviarlo al componente ActiveX per l'elaborazione. In entrambi i casi, dopo che il componente ha ottenuto le informazioni dell'ordine, Ŕ possibile automatizzare Word per creare e visualizzare il documento fattura per l'ordine.

Il componente ActiveX ( AutomateWord ) contiene una classe singola, la classe di fattura , che espone tre metodi:
  • Il metodo GetData utilizza ActiveX Data Objects (ADO) per estrarre informazioni su un ordine nel database di esempio Northwind. Le informazioni dell'ordine sono memorizzate nella variabile membro privata m_Data . Pu˛ essere chiamato il metodo GetData per consentire l'estrazione di dati che si verificano lato client.
  • Il metodo SendData utilizza Microsoft XML (MSXML) per compilare la variabile membro privata m_Data con le informazioni ordine fornite dal chiamante. SendData prevede un parametro che rappresenta un oggetto DOMDocument per le informazioni dell'ordine. Il metodo SendData pu˛ essere chiamato per inviare le informazioni dell'ordine dalla pagina Web al componente. Con questo approccio, Ŕ possibile utilizzare ASP per estrarre dati lato server e presentare il client con un'isola di dati XML che pu˛ essere utilizzata per la generazione del documento.
  • Il metodo MakeInvoice utilizza automazione di Word per creare un documento che contiene le informazioni dell'ordine nella variabile membro privata m_Data . Un documento memorizzato sul Web server viene utilizzato come punto di partenza per la fattura. Il chiamante potrebbe scegliere di visualizzare il documento Word completato all'esterno del browser o salvare il documento completato in un disco per un utilizzo successivo.
Invoice.CLS As Object, oRS As Object oConn come InvoiceData Public Sub GetData(sOrderID As Variant, sConn As Variant) Dim m_Data
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
				

Utilizzando il componente ActiveX da una pagina Web

Autoword1.htm viene illustrato come Ŕ possibile utilizzare il metodo GetData per consentire il componente ActiveX recuperare l'ordine dei dati lato client e generare il 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>
				
lo script in Autoword1.htm consente di utilizza il componente ActiveX per visualizzare il documento completato all'esterno del browser. ╚ anche potrebbe scegliere di salvare il documento completato e visualizzarla nel browser, tuttavia, questa operazione richiede che il documento di Word venga salvata in un disco. Il componente Ŕ possibile salvare il documento come C:\Invoice.doc sul disco locale del client. PerchÚ il componente ActiveX Ŕ contrassegnato come sicuro per la creazione di script, il client viene richiesto di confermare il salvataggio.

Se si desidera visualizzare il documento completato nel browser, Ŕ possibile modificare la chiamata a MakeInvoice in Autoword1.htm al seguente: Autoword2.htm
      AutoWord.MakeInvoice "http://YourWebServer/invoice/invoice.doc", True
      window.navigate "c:\invoice.doc"
				
viene illustrato come si pu˛ utilizzare il metodo SendData per inviare dati l'ordine come un oggetto DOMDocument il componente ActiveX per la generazione del documento completato. Il DOMDocument viene creato da un'isola di dati XML che risiede in tale pagina. Per il componente ActiveX elaborare correttamente le informazioni di ordine viene inviate dal chiamante, il codice XML deve essere ben formato e strutturati in modo che il componente Ŕ interpretato come le informazioni sugli ordini.

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>
				
in Autoword1.htm e Autoword2.htm, si tenga presente che il componente ActiveX viene creata un'istanza per mezzo di un tag <object> anzichÚ ifunzione CreateObject . Lo scopo di utilizzare il tag <object> Ŕ per consentire il download automatico del componente ActiveX per gli utenti che non Ŕ giÓ installato il componente. Se un utente visita una di queste pagine e il componente non Ŕ installato, il componente verrÓ scaricato dal CAB file (CAB) all'indirizzo indicato nelattributo CODEBASE . A seconda impostazioni di protezione dell'utente in Internet Explorer, Ŕ possibile che prima richiesta di confermare il download.

Nota : file di il CAB Ŕ incluso nei autoword.exe Ŕ stato creato con il pacchetto e la distribuzione guidata per Visual Basic. Il componente ActiveX nel pacchetto Ŕ contrassegnato come sicuro per la creazione di script e l'inizializzazione, ma non Ŕ firmato digitalmente.

Per ulteriori informazioni sulla creazione di download del componente di Internet, la firma digitale e il contrassegno dei componenti come sicuri per la creazione di script e l'inizializzazione, vedere i seguenti siti Web MSDN (informazioni in lingua inglese):
La firma e controllo del codice con Authenticode
http://msdn2.microsoft.com/en-us/library/ms537364.aspx

Inizializzazione di sicuro e script per i controlli ActiveX
http://msdn2.microsoft.com/en-us/library/Aa751977.aspx

Riferimenti

Per ulteriori informazioni, fare clic sui numeri degli articoli della Microsoft Knowledge Base riportato di seguito:
257757INFORMAZIONI: Automazione di Office per l'esecuzione automatica Ŕ non Ŕ consigliata o supportata
270906Utilizzo di ASP per generare un documento di Format (RTF) Rich Text Stream in Microsoft Word
(c) Microsoft Corporation 2001, tutti i diritti riservati. Con il contributo di Lori B. Turner, Microsoft Corporation.

ProprietÓ

Identificativo articolo: 286023 - Ultima modifica: giovedý 17 maggio 2007 - Revisione: 11.3
Le informazioni in questo articolo si applicano 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
Chiavi:á
kbmt kbdownload kbautomation kbhowto KB286023 KbMtit
Traduzione automatica articoli
Il presente articolo Ŕ stato tradotto tramite il software di traduzione automatica di Microsoft e non da una persona. Microsoft offre sia articoli tradotti da persone fisiche sia articoli tradotti automaticamente da un software, in modo da rendere disponibili tutti gli articoli presenti nella nostra Knowledge Base nella lingua madre dell?utente. Tuttavia, un articolo tradotto in modo automatico non Ŕ sempre perfetto. Potrebbe contenere errori di sintassi, di grammatica o di utilizzo dei vocaboli, pi¨ o meno allo stesso modo di come una persona straniera potrebbe commettere degli errori parlando una lingua che non Ŕ la sua. Microsoft non Ŕ responsabile di alcuna imprecisione, errore o danno cagionato da qualsiasi traduzione non corretta dei contenuti o dell?utilizzo degli stessi fatto dai propri clienti. Microsoft, inoltre, aggiorna frequentemente il software di traduzione automatica.
Clicca qui per visualizzare la versione originale in inglese dell?articolo: 286023
LE INFORMAZIONI CONTENUTE NELLA MICROSOFT KNOWLEDGE BASE SONO FORNITE SENZA GARANZIA DI ALCUN TIPO, IMPLICITA OD ESPLICITA, COMPRESA QUELLA RIGUARDO ALLA COMMERCIALIZZAZIONE E/O COMPATIBILITA' IN IMPIEGHI PARTICOLARI. L'UTENTE SI ASSUME L'INTERA RESPONSABILITA' PER L'UTILIZZO DI QUESTE INFORMAZIONI. IN NESSUN CASO MICROSOFT CORPORATION E I SUOI FORNITORI SI RENDONO RESPONSABILI PER DANNI DIRETTI, INDIRETTI O ACCIDENTALI CHE POSSANO PROVOCARE PERDITA DI DENARO O DI DATI, ANCHE SE MICROSOFT O I SUOI FORNITORI FOSSERO STATI AVVISATI. IL DOCUMENTO PUO' ESSERE COPIATO E DISTRIBUITO ALLE SEGUENTI CONDIZIONI: 1) IL TESTO DEVE ESSERE COPIATO INTEGRALMENTE E TUTTE LE PAGINE DEVONO ESSERE INCLUSE. 2) I PROGRAMMI SE PRESENTI, DEVONO ESSERE COPIATI SENZA MODIFICHE, 3) IL DOCUMENTO DEVE ESSERE DISTRIBUITO INTERAMENTE IN OGNI SUA PARTE. 4) IL DOCUMENTO NON PUO' ESSERE DISTRIBUITO A SCOPO DI LUCRO.

Invia suggerimenti

 

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