Comment faire pour utiliser un composant ActiveX Visual Basic pour automatisation de Word à partir d'Internet Explorer

Traductions disponibles Traductions disponibles
Numéro d'article: 286023 - Voir les produits auxquels s'applique cet article
Agrandir tout | Réduire tout

Sommaire

Résumé

Cet article explique comment vous pouvez utiliser un ActiveX composant pour côté client, Automatisation de Word à partir d'une page Web qui est affichée dans Internet Explorer. Il existe plusieurs avantages à utiliser un composant ActiveX à partir d'une page Web au lieu de script qui est imbriqué dans la page Web elle-même :
  • Si vous avez déjà code Visual Basic qui automatise Word, vous pouvez réutiliser votre code dans le navigateur en convertissant votre projet Visual Basic à un EXE ActiveX ou une DLL ActiveX.
  • Word n'est pas marquée sûr pour l'écriture de scripts. Selon les paramètres de sécurité dans Internet Explorer, le code Automation Word dans le script peut s'exécute pas ou l'utilisateur peut être invité avec un avertissement de sécurité. En supposant que votre composant ActiveX remplit certaines instructions, il peut être marqué sûr pour les scripts pour éviter ces problèmes de sécurité.
  • Visual Basic comporte plusieurs fonctionnalités qui vous ne pouvez pas utiliser avec script dans une page Web. Par exemple, une fonctionnalité qui est disponible à Visual Basic mais pas au script de page Web est la possibilité d'appeler l'interface de programmation d'application Windows (API).
Un scénario de développeur commun consiste à présenter aux utilisateurs une interface de page Web pour créer un document Word en utilisant des données de certains source externe ou logique. Bien que vous pouvez utiliser Automatisation de Word côté serveur pour générer le document et le flux au client, il existe plusieurs inconvénients à l'utilisation d'une approche côté serveur qui implique l'automation Word. L'inconvénient principal est l'évolutivité ; Word est un serveur Automation très gourmande et n'est pas recommandé pour la génération de documents sur le serveur Web.

En utilisant un composant ActiveX pour effectuer la génération de documents sur le client, vous pouvez déplacer l'automation Word de ressources à partir du serveur Web. Ceci est la solution qui vous est présentée par le composant ActiveX exemple décrite dans cet article. Bien que l'exemple soit spécifique à l'automatisation de Word, les mêmes principes peuvent être appliquées pour l'automatisation autres Microsoft Office applications, telles que Microsoft Excel.

Plus d'informations

Télécharger l'exemple

AutoWord.exe contient le projet DLL ActiveX de Visual Basic, Word document et les pages Web qui sont décrits dans cet article.

Le fichier suivant est téléchargeable à partir du Centre de téléchargement Microsoft :
Autoword.exe
Date de publication : avril 17, 2001

Pour plus d'informations sur la façon de télécharger des fichiers de support technique Microsoft, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la Base de connaissances Microsoft :
119591 Comment obtenir des fichiers de support technique Microsoft auprès des services en ligne
Microsoft a analysé ce fichier de virus. Microsoft utilisé les logiciels de détection de virus plus récente ne sont associé à la date à laquelle le fichier a été validé. Le fichier est stocké sur des serveurs sécurisés, pour empêcher toute modification non autorisée dans le fichier.

Configurer l'exemple

Après avoir téléchargé Autoword.exe, procédez comme suit pour configurer l'exemple :
  1. Créez un dossier appelé facture dans le répertoire racine virtuel de votre serveur Web. (Le répertoire racine virtuel par défaut est pour 2 C:\Inetpub\Wwwroot f d'articles.)
  2. Extraire les fichiers dans Autoword.exe sur la facture dossier.
  3. Ouvrir Autoword1.htm dans un texte ou d'un éditeur HTML et remplacez les références aux YourWebServer dans toutes les URL par le nom de votre serveur Web. De même, remplacez YourSQLServer dans la chaîne de connexion par le nom de votre SQL Server qui contient la base de données exemple Les Comptoirs.

    Remarque : si vous Server n'êtes pas un disponibles SQL avec les Comptoirs base de données exemple, vous pouvez modifier la chaîne de connexion à utiliser l'exemple de base de données Microsoft Access Les Comptoirs à la place. Une connexion pour les Comptoirs de Access exemple de base de données est semblable à celui-ci :
    sConn = "provider=microsoft.jet.oledb.4.0; data source=" & _
            "C:\Program Files\Microsoft Office\Office10\Samples\Northwind.mdb"
    					
  4. Ouvrir Autoword2.htm dans un texte ou d'un éditeur HTML et remplacez les références aux YourWebServer dans toutes les URL par le nom de votre serveur Web.
  5. Démarrez Internet Explorer. Vous pouvez parcourir http://YourWebServer/invoice/AutoWord1.htm et http://YourWebServer/invoice/AutoWord2.htm pour tester le script. Lorsque vous consultez tout d'abord une des ces pages, vous êtes invité à télécharger le contrôle ActiveX composant.
L'exemple de composant ActiveX Visual Basic et le script sont décrits en détail dans les sections qui suivent.

Le composant ActiveX Visual Basic

Le composant ActiveX Visual Basic dans cet exemple interagit avec script de page Web pour générer un document de facture de commande à demande de l'utilisateur. L'application Web peut permettre le composant ActiveX pour obtenir les informations de commande pour un numéro de commande donnée, ou l'application Web peut choisir empaqueter les informations de commande au format XML et l'envoyer au composant ActiveX pour traitement. Dans les deux cas, une fois le composant obtient les informations de commande, il peut automatiser Word pour créer et afficher le document de facture pour la commande.

Le composant ActiveX ( AutomateWord ) contient une classe unique, la classe facture , qui expose les trois méthodes :
  • La méthode GetData utilise (ActiveX Data Objects) pour extraire des informations sur une commande dans la base de données Les Comptoirs. Les informations de commande sont stockées dans la variable membre privée m_Data . La méthode GetData peut être appelée pour permettre l'extraction de données se produit côté client.
  • La méthode SendData utilise Microsoft XML (MSXML) pour remplir la variable de membre privé m_Data avec les informations de commande qui sont fournies par l'appelant. SendData attend un paramètre qui représente un objet DOMDocument pour les informations de commande. La méthode SendData peut être appelée pour envoyer des commandes informations à partir de la page Web au composant. Avec cette approche, vous pouvez utiliser ASP pour extraire des données côté serveur et présenter le client avec un data-island XML peut être utilisée pour la génération de document.
  • La méthode MakeInvoice utilise Automation Word pour créer un document qui contient les données de commande dans la variable membre privée m_Data . Un document qui est stocké sur le Web serveur utilisé comme point de départ pour la facture. L'appelant peut choisir d'afficher le document Word terminé en dehors du navigateur ou enregistrer le document terminé sur un disque pour une utilisation ultérieure.
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
				

L'utilisation du composant ActiveX à partir d'une page Web

Autoword1.htm illustre comment vous pouvez utiliser la méthode GetData pour permettre le composant ActiveX extraire la commande données côté client et créer le document.

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>
				
le script dans Autoword1.htm utilise le composant ActiveX pour afficher le document terminé en dehors du navigateur. Vous pouvez aussi choisir d'enregistrer le document terminé et affiche dans le navigateur ; cependant, ceci donc nécessite que le document Word enregistrement sur un disque. Le composant pouvez enregistrer le document comme C:\Invoice.doc sur le disque local du client. Car le composant ActiveX est marqué sûr pour l'écriture de scripts, le client est invité à confirmer l'enregistrement.

Si vous souhaitez afficher le document terminé dans le navigateur, modifier l'appel de MakeInvoice dans Autoword1.htm à la suivante : Autoword2.htm
      AutoWord.MakeInvoice "http://YourWebServer/invoice/invoice.doc", True
      window.navigate "c:\invoice.doc"
				
explique comment vous pouvez utiliser la méthode SendData envoyer les données commande sous la forme d'un objet DOMDocument au composant ActiveX pour la génération du document terminé. Le DOMDocument est créée à partir d'un data-island XML qui réside sur la page Web. Pour que le composant ActiveX traiter correctement les informations de commande qui sont envoyées par l'appelant, le code XML doit être bien formé et structurées afin que le composant peut l'interpréter comme informations de commande.

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>
				
dans les Autoword1.htm et Autoword2.htm, vous devez noter que le composant ActiveX est instancié par le biais d'une balise <object> plutôt que lafonction CreateObject . Le de l'utilisation de la balise <object> sert à activer le téléchargement automatique du composant ActiveX pour les utilisateurs qui n'ont pas déjà installé le composant installé. Si un utilisateur visite une de ces pages et le composant n'est pas installé, le composant est téléchargé depuis le fichier CAB (CAB à L'ADRESSE qui est indiqué dans leattribut CODEBASE . Selon des paramètres de sécurité l'utilisateur dans Internet Explorer, il peuvent tout d'abord invite à confirmer le téléchargement.

Remarque : fichier CAB le qui est inclus dans Autoword.exe a été créé avec l'Assistant Empaquetage et déploiement ou aux étiquettes de publipostage pour Visual Basic. Le composant ActiveX dans le package est reconnu sûrs pour l'écriture de scripts et l'initialisation, mais n'est pas signé numériquement.

Pour plus d'informations sur la création de téléchargements de composant Internet, signature numérique et marquage composants comme sûrs pour l'écriture de scripts et l'initialisation, voir aux sites Web de MSDN (Microsoft Developer Network) aux adresses suivantes :
Signature et la vérification de code avec Authenticode
http://msdn2.microsoft.com/en-us/library/ms537364.aspx

Initialisation sure et script pour les contrôles ActiveX
http://msdn2.microsoft.com/en-us/library/Aa751977.aspx

Références

Pour plus d'informations, cliquez sur les numéros ci-dessous pour afficher les articles correspondants dans la Base de connaissances Microsoft :
257757 INFO : Automatisation de Microsoft Office pour le mode d'exécution autonome est pas recommandées ou prises en charge
270906 Comment faire pour utiliser ASP pour générer un document en forme (RTF) texte enrichi à diffuser dans Microsoft Word
(c) Microsoft Corporation 2001, Tous droits réservés. Contribution de Lori b. Turner, Microsoft Corporation.

Propriétés

Numéro d'article: 286023 - Dernière mise à jour: jeudi 17 mai 2007 - Version: 11.3
Les informations contenues dans cet article s'appliquent au(x) produit(s) suivant(s):
  • 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 Édition professionnelle
  • Microsoft Internet Explorer 5.0
  • Microsoft Internet Explorer 5.01
  • Microsoft Internet Explorer 5.5
Mots-clés : 
kbmt kbdownload kbautomation kbhowto KB286023 KbMtfr
Traduction automatique
IMPORTANT : Cet article est issu du système de traduction automatique mis au point par Microsoft (http://support.microsoft.com/gp/mtdetails). Un certain nombre d?articles obtenus par traduction automatique sont en effet mis à votre disposition en complément des articles traduits en langue française par des traducteurs professionnels. Cela vous permet d?avoir accès, dans votre propre langue, à l?ensemble des articles de la base de connaissances rédigés originellement en langue anglaise. Les articles traduits automatiquement ne sont pas toujours parfaits et peuvent comporter des erreurs de vocabulaire, de syntaxe ou de grammaire (probablement semblables aux erreurs que ferait une personne étrangère s?exprimant dans votre langue !). Néanmoins, mis à part ces imperfections, ces articles devraient suffire à vous orienter et à vous aider à résoudre votre problème. Microsoft s?efforce aussi continuellement de faire évoluer son système de traduction automatique.
La version anglaise de cet article est la suivante: 286023
L'INFORMATION CONTENUE DANS CE DOCUMENT EST FOURNIE PAR MICROSOFT SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE. L'UTILISATEUR ASSUME LE RISQUE DE L'UTILISATION DU CONTENU DE CE DOCUMENT. CE DOCUMENT NE PEUT ETRE REVENDU OU CEDE EN ECHANGE D'UN QUELCONQUE PROFIT.

Envoyer des commentaires

 

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