Verwenden einer Visual Basic-ActiveX-Komponente zur Automatisierung von Word in Internet Explorer

SPRACHE AUSWÄHLEN SPRACHE AUSWÄHLEN
Artikel-ID: 286023 - Produkte anzeigen, auf die sich dieser Artikel bezieht
Dieser Artikel ist eine Übersetzung des folgenden englischsprachigen Artikels der Microsoft Knowledge Base:
286023 How to use a VB ActiveX component for Word automation from Internet Explorer
Bitte beachten Sie: Bei diesem Artikel handelt es sich um eine Übersetzung aus dem Englischen. Es ist möglich, dass nachträgliche Änderungen bzw. Ergänzungen im englischen Originalartikel in dieser Übersetzung nicht berücksichtigt sind. Die in diesem Artikel enthaltenen Informationen basieren auf der/den englischsprachigen Produktversion(en). Die Richtigkeit dieser Informationen in Zusammenhang mit anderssprachigen Produktversionen wurde im Rahmen dieser Übersetzung nicht getestet. Microsoft stellt diese Informationen ohne Gewähr für Richtigkeit bzw. Funktionalität zur Verfügung und übernimmt auch keine Gewährleistung bezüglich der Vollständigkeit oder Richtigkeit der Übersetzung.
Alles erweitern | Alles schließen

Auf dieser Seite

Zusammenfassung

Dieser Artikel beschreibt, wie Sie eine ActiveX-Komponente für die clientseitige Automatisierung von Word von einer Webseite aus verwenden können, die in Internet Explorer angezeigt wird. Die Verwendung einer ActiveX-Komponente von einer Webseite aus hat viele Vorteile gegenüber einem Skript, das in die Webseite selbst eingebettet ist:
  • Wenn Sie bereits über Visual Basic-Code verfügen, der Microsoft Word automatisiert, können Sie diesen Code im Browser wieder verwenden, indem Sie Ihr Visual Basic-Projekt entweder in eine ActiveX-EXE oder eine ActiveX-DLL umwandeln.
  • Word ist nicht als sicher für Skripting markiert. Je nach den Sicherheitseinstellungen in Internet Explorer wird Automatisierungscode für Word in Skripts möglicherweise nicht ausgeführt, oder dem Benutzer wird eine Sicherheitswarnung angezeigt. Wenn Ihre ActiveX-Komponente bestimmte Richtlinien erfüllt, kann sie als sicher für Skripting markiert werden, um solche Sicherheitsprobleme zu verhindern.
  • Visual Basic verfügt über mehrere Features, die Sie nicht mit einem Skript auf einer Webseite verwenden können. Ein Feature, das beispielsweise für Visual Basic, jedoch nicht für ein Webseitenskript verfügbar ist, ist die Möglichkeit, die Windows-API (Application Programming Interface) aufzurufen.
Ein häufiges Entwicklerszenario besteht darin, dass Benutzern eine Webseitenoberfläche zur Erstellung eines Word-Dokuments mithilfe von Daten aus einer externen Quelle oder Logik präsentiert wird. Obwohl Sie die serverseitige Word-Automatisierung verwenden können, um das Dokument zu erstellen und es zurück an den Client zu übertragen, gibt es viele Nachteile im Hinblick auf die Verwendung eines serverseitigen Ansatzes mit der Word-Automatisierung. Der Hauptnachteil ist die Skalierbarkeit. Word ist ein sehr ressourcenintensiver Automatisierungsserver und eignet sich nicht für die Dokumenterstellung auf dem Webserver.

Durch Verwendung einer ActiveX-Komponente zur Durchführung der Dokumenterstellung auf dem Client können Sie die ressourcenintensive Word-Automatisierung von dem Webserver verlagern. Um diese Lösung geht es bei der Beispiel-ActiveX-Komponente, die in diesem Artikel erläutert wird. Obwohl sich das Beispiel mit der Word-Automatisierung befasst, gelten die gleichen Grundsätze auch für die Automatisierung anderer Microsoft Office-Anwendungen wie Microsoft Excel.

Weitere Informationen

Herunterladen des Beispiels

"AutoWord.exe" enthält das Visual Basic-ActiveX-DLL-Projekt, das Word-Dokument und die Webseiten, die in diesem Artikel beschrieben werden.

Die folgende Datei steht im Microsoft Download Center zum Download zur Verfügung:
Autoword.exe
Freigabedatum: 17.04.2001

Weitere Informationen über das Herunterladen von Microsoft Support-Dateien finden Sie im folgenden Artikel der Microsoft Knowledge Base:
119591 So erhalten Sie Microsoft Support-Dateien im Internet
Microsoft hat diese Datei auf Viren überprüft. Microsoft hat dazu die neueste Software zur Virenerkennung verwendet, die zum Zeitpunkt der Bereitstellung verfügbar war. Die Datei befindet sich auf Servern mit verstärkter Sicherheit, wodurch nicht autorisierte Änderungen an der Datei weitestgehend verhindert werden.

Einrichten des Beispiels

Nachdem Sie die Datei "Autoword.exe" heruntergeladen haben, gehen Sie folgendermaßen vor, um das Beispiel einzurichten.
  1. Erstellen Sie einen Ordner mit dem Namen "Invoice" im virtuellen Stammverzeichnis Ihres Webservers. (Das standardmäßige virtuelle Stammverzeichnis ist C:\Inetpub\Wwwroot.)
  2. Extrahieren Sie die Dateien in "Autoword.exe" in den Ordner "Invoice".
  3. Öffnen Sie "Autoword1.htm" in einem Text- oder HTML-Editor, und ersetzen Sie die Verweise auf IhrenWebserver in allen URLs durch den Namen Ihres Webservers. Ersetzen Sie auch IhrSQLServer in der Verbindungszeichenfolge durch den Namen Ihres SQL Servers, der die Beispieldatenbank "Nordwind" enthält.

    Hinweis: Wenn Sie keinen SQL Server mit der Nordwind-Beispieldatenbank verfügbar haben, können Sie die Verbindungszeichenfolge so ändern, dass stattdessen die Nordwind-Beispieldatenbank von Microsoft Access verwendet wird. Eine Verbindung mit der Nordwind-Beispieldatenbank von Access sieht folgendermaßen aus:
    sConn = "provider=microsoft.jet.oledb.4.0; data source=" & _
            "C:\Program Files\Microsoft Office\Office10\Samples\Northwind.mdb"
    					
  4. Öffnen Sie "Autoword2.htm" in einem Text- oder HTML-Editor, und ersetzen Sie die Verweise auf IhrenWebserver in allen URLs durch den Namen Ihres Webservers.
  5. Starten Sie Internet Explorer. Öffnen Sie die Seite "http://IhrWebserver/invoice/AutoWord1.htm" und http://IhrWebserver/Rechnung/AutoWord2.htm", um das Skript zu testen. Wenn Sie eine dieser Seiten zum ersten Mal aufrufen, werden Sie aufgefordert, die ActiveX-Komponente herunterzuladen.
Die Visual Basic-ActiveX-Beispielkomponente und das Skript werden in den folgenden Abschnitten ausführlich beschrieben.

Visual Basic-ActiveX-Komponente

Die Visual Basic-ActiveX-Beispielkomponente in diesem Beispiel interagiert mit dem Webseitenskript, um auf Anforderung des Benutzers ein Rechnungsdokument zu erstellen. Die Webanwendung kann der ActiveX-Komponente erlauben, die Auftragsinformationen für eine bestimmte Auftragsnummer abzurufen, oder die Webanwendung kann die Auftragsinformationen als XML-Code verpacken und diesen zur Verarbeitung an die ActiveX-Komponente senden. In beiden Fällen kann die Komponente, nachdem sie die Auftragsinformationen erhalten hat, Word so automatisieren, dass das Rechnungsdokument für den Auftrag erstellt und angezeigt wird.

Die ActiveX-Komponente (AutomateWord) enthält eine einzige Klasse, die Klasse Invoice, die drei Methoden umfasst:
  • Die GetData-Methode verwendet ActiveX Data Objects (ADO), um Informationen zu einem Auftrag in der Nordwind-Beispieldatenbank zu extrahieren. Die Auftragsinformationen sind in der privaten Membervariablen m_Data gespeichert. Die GetData-Methode kann aufgerufen werden, damit die Datenextraktion clientseitig erfolgt.
  • Die SendData-Methode verwendet Microsoft XML (MSXML), um die private Membervariable m_Data mit den von dem Aufrufer bereitgestellten Auftragsinformationen aufzufüllen. SendData erwartet für die Auftragsinformationen einen Parameter, der ein DOMDocument-Objekt darstellt. Die SendData-Methode kann aufgerufen werden, damit die Auftragsinformationen von der Webseite an die Komponente gesendet werden. Bei diesem Ansatz können Sie ASP verwenden, um die Daten serverseitig zu extrahieren und dem Client eine XML-Dateninsel zu präsentieren, die für die Dokument erstellt verwendet werden kann.
  • Die MakeInvoice-Methode verwendet die Word-Automatisierung, um ein Dokument zu erstellen, das die Auftragsinformationen in der privaten Membervariablen m_Data enthält. Ein Dokument, das auf dem Webserver gespeichert ist, wird als Ausgangspunkt für die Rechnung verwendet. Der Aufrufer kann das fertige Word-Dokument außerhalb des Browsers anzeigen oder das fertige Dokument speichern, um es später zu verwenden.
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
				

Verwenden der ActiveX-Komponente von einer Webseite

"Autoword1.htm" zeigt, wie Sie die GetData-Methode verwenden können, damit die ActiveX-Komponente die Auftragsdaten clientseitig abrufen und das Dokument erstellen kann.

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>
				
Das Skript in "Autoword1.htm" verwendet die ActiveX-Komponente, um das fertige Dokument außerhalb des Browsers anzuzeigen. Sie können das fertige Dokument auch speichern und es im Browser anzeigen. Hierfür muss das Word-Dokument allerdings auf einen Datenträger gespeichert werden. Die Komponente kann das Dokument als "C:\Invoice.doc" auf der lokalen Festplatte des Clients speichern. Da die ActiveX-Komponente als sicher für Skripting markiert ist, wird der Client aufgefordert, das Speichern zu bestätigen.

Wenn Sie das fertige Dokument im Browser anzeigen möchten, ändern Sie den Aufruf von MakeInvoice in "Autoword1.htm" folgendermaßen:
      AutoWord.MakeInvoice "http://YourWebServer/invoice/invoice.doc", True
      window.navigate "c:\invoice.doc"
				
"Autoword2.htm" zeigt, wie Sie die SendData-Methode verwenden können, um die Auftragsdaten als DOMDocument-Objekt an die ActiveX-Komponente zur Erstellung des fertigen Dokuments zu senden. Das DOMDocument-Objekt wird aus einer XML-Dateninsel erstellt, die sich auf der Webseite befindet. Damit die ActiveX-Komponente die Auftragsinformationen, die von dem Aufrufer gesendet werden, korrekt verarbeitet, muss der XML-Code wohl geformt und so strukturiert sein, dass die Komponente diesen als Auftragsinformationen interpretiert.

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>
				
Sowohl in "Autoword1.htm" als auch in "Autoword2.htm" wird die ActiveX-Komponente durch ein <OBJECT>-Tag instanziiert und nicht durch die CreateObject-Funktion. Der Zweck der Verwendung des <OBJECT>-Tags besteht darin, den automatischen Download der ActiveX-Komponente für Benutzer zu aktivieren, die die Komponente noch nicht installiert haben. Wenn ein Benutzer eine dieser Seiten besucht und die Komponente nicht installiert ist, wird die Komponente aus der CAB-Datei von dem URL heruntergeladen, der in dem CODEBASE-Attribut angegeben ist. Je nach den Sicherheitseinstellungen des Benutzers in Internet Explorer wird möglicherweise zuerst eine Aufforderung zur Bestätigung des Downloads angezeigt.

Hinweis: Die CAB-Datei, die in "Autoword.exe" enthalten ist, wurde mit dem Paket- und Weitergabe-Assistenten von Visual Basic erstellt. Die ActiveX-Komponente in dem Paket ist als sicher für Skripting und die Initialisierung markiert, ist jedoch nicht digital signiert.

Weitere Informationen zum Erstellen von Downloads von Internet-Komponenten, zur digitalen Signierung und zum Markieren von Komponenten als sicher für Skripting und Initialisierung finden Sie auf den folgenden MSDN-Websites (Microsoft Developer Network):
Signing and Checking Code with Authenticode
http://msdn2.microsoft.com/en-us/library/ms537364.aspx

Safe Initialization and Scripting for ActiveX Controls
http://msdn2.microsoft.com/en-us/library/Aa751977.aspx

Informationsquellen

Weitere Informationen finden Sie in den folgenden Artikeln der Microsoft Knowledge Base:
257757 INFO: Was bei der serverseitigen Automatisierung von Office zu beachten ist
270906 Wie Verwenden von ASP zu dem Generieren eines RTF-Dokuments in Stream zu Microsoft Word
(c) Microsoft Corporation 2001, Alle Rechte vorbehalten. Beiträge von Lori B. Turner, Microsoft Corporation.

Eigenschaften

Artikel-ID: 286023 - Geändert am: Montag, 25. Juni 2007 - Version: 11.2
Die Informationen in diesem Artikel beziehen sich auf:
  • 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
Keywords: 
kbdownload kbautomation kbhowto KB286023
Microsoft stellt Ihnen die in der Knowledge Base angebotenen Artikel und Informationen als Service-Leistung zur Verfügung. Microsoft übernimmt keinerlei Gewährleistung dafür, dass die angebotenen Artikel und Informationen auch in Ihrer Einsatzumgebung die erwünschten Ergebnisse erzielen. Die Entscheidung darüber, ob und in welcher Form Sie die angebotenen Artikel und Informationen nutzen, liegt daher allein bei Ihnen. Mit Ausnahme der gesetzlichen Haftung für Vorsatz ist jede Haftung von Microsoft im Zusammenhang mit Ihrer Nutzung dieser Artikel oder Informationen ausgeschlossen.

Ihr Feedback an uns

 

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