Sie sind zurzeit offline. Es wird auf die erneute Herstellung einer Internetverbindung gewartet.

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

Der Support für Office 2003 wurde eingestellt

Microsoft stellte am 8. April 2014 den Support für Office 2003 ein. Diese Änderung wirkt sich auf Ihre Softwareupdates und Sicherheitsoptionen aus. Erfahren Sie, was das für Sie bedeutet und wie Sie Ihren Schutz aufrechterhalten können.

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
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:
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 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				

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-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>				
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.
automating automate automation createobject msword 2000 2002 xp ie WD2003 WD2007
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.
Eigenschaften

Artikelnummer: 286023 – Letzte Überarbeitung: 06/25/2007 17:44:56 – Revision: 11.2

  • 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
  • kbdownload kbautomation kbhowto KB286023
Feedback
ndow.location.protocol) + "//c.microsoft.com/ms.js'><\/script>");