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.
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
(http://download.microsoft.com/download/word2002/sample/1.0/win98mexp/en-us/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
(http://support.microsoft.com/kb/119591/EN-US/
)
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 :
- 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.)
- Extraire les fichiers dans Autoword.exe sur la facture dossier.
- 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"
- 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.
- 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 :
Pour plus d'informations, cliquez sur les numéros ci-dessous pour afficher les articles correspondants dans la Base de connaissances Microsoft :
257757
(http://support.microsoft.com/kb/257757/
)
INFO : Automatisation de Microsoft Office pour le mode d'exécution autonome est pas recommandées ou prises en charge
270906
(http://support.microsoft.com/kb/270906/EN-US/
)
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.
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
| kbmt kbdownload kbautomation kbhowto KB286023 KbMtfr |
Traduction automatiqueIMPORTANT : 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
(http://support.microsoft.com/kb/286023/en-us/
)
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.