Jak używać składnik VB ActiveX dla automatyzacji programu Word w programie Internet Explorer

Streszczenie

W tym artykule przedstawiono, jak można użyć składnika ActiveX dla klienta automatyzacji programu Word ze strony sieci Web, która jest renderowana w programie Internet Explorer. Do używania składnika ActiveX ze strony sieci Web, zamiast skryptu, który jest osadzony w stronie sieci Web ma wiele zalet:
  • Jeśli masz już kodu języka Visual Basic, który automatyzuje program Microsoft Word, można ponownie użyć kodu w przeglądarce konwertując projekt programu Visual Basic ActiveX DLL lub EXE formantu ActiveX.
  • Program Word nie jest oznaczony obsługi skryptów. W zależności od ustawień zabezpieczeń w programie Internet Explorer kodu automatyzacji programu Word w skrypcie mogą nie działać lub użytkownik może być monitowany ostrzeżenie dotyczące zabezpieczeń. Przy założeniu, że składnik ActiveX spełnia pewne wytyczne, może być oznaczony obsługi skryptów, aby uniknąć tych problemów z zabezpieczeniami.
  • Visual Basic ma kilka funkcji, które nie mogą korzystać ze skryptu na stronie sieci Web. Na przykład jedna funkcja, która jest dostępna w języku Visual Basic, ale nie do skryptu strony sieci Web jest zdolność do wywołania interfejsu programowania aplikacji (API) systemu Windows.
Typowym scenariuszem Deweloper ma zaprezentować użytkownikom interfejs strony sieci Web do tworzenia dokumentu programu Word przy użyciu danych z niektórych źródła zewnętrznego lub logicznych. Chociaż po stronie serwera automatyzacji programu Word można używać do generowania dokumentu i strumienia do klienta, istnieje wiele wady korzystania podejście po stronie serwera, które obejmuje automatyzacji programu Word. Podstawową wadą jest skalowalność; Program Word jest bardzo obciąża serwer automatyzacji i nie jest zalecane dla Generowanie dokumentu na serwerze sieci Web.

Za pomocą składnika ActiveX do wykonywania Generowanie dokumentu po stronie klienta, można przenieść obciąża automatyzacji programu Word z serwera sieci Web. To rozwiązanie, które jest prezentowany przez składnik ActiveX próbki, która została omówiona w tym artykule. Mimo, że próbka jest specyficzne dla automatyzacji programu Word, te same zasady może być stosowane do automatyzowania inne aplikacje Microsoft Office, takich jak Microsoft Excel.

Więcej informacji

Pobrać próbki

AutoWord.exe zawiera projekt Visual Basic ActiveX DLL, dokument programu Word i stron sieci Web, które są opisane w tym artykule.

Następujący plik jest dostępny do pobrania z witryny Centrum pobierania firmy Microsoft:
Data wydania:, 17 kwietnia 2001

Aby uzyskać dodatkowe informacje dotyczące sposobu pobierania plików Support firmy Microsoft, kliknij następujący numer artykułu w celu wyświetlenia tego artykułu z bazy wiedzy Microsoft Knowledge Base:
119591 jak uzyskać pliki pomocy technicznej Microsoft w usługach Online
Firma Microsoft przeskanowała plik w poszukiwaniu wirusów. Firma Microsoft użyła najnowszego oprogramowania do wykrywania wirusów, które było dostępne w dniu opublikowania pliku. Plik jest przechowywany na serwerach o podwyższonych zabezpieczeniach, które uniemożliwiają wprowadzanie nieautoryzowanych zmian w pliku.

Konfigurowanie próbki

Po pobraniu Autoword.exe, wykonaj następujące kroki, aby skonfigurować próbki:
  1. Utwórz folder o nazwie faktury w katalogu wirtualnego katalogu głównego serwera sieci Web. (Domyślny wirtualny katalog główny to C:\Inetpub\Wwwroot.)
  2. Wyodrębnij pliki w Autoword.exe do folderu faktury.
  3. Otwórz Autoword1.htm w edytorze HTML lub tekst i zastąpić odniesienia do TwójSerwerSieciWeb we wszystkich adresach URL nazwy serwera sieci Web. Podobnie Zamień YourSQLServer w ciągu połączenia na nazwę programu SQL Server, zawiera przykładowej bazy danych Northwind.

    Uwaga: Jeśli nie masz dostępnego serwera SQL z przykładowej bazy danych Northwind, można zmodyfikować ciąg połączenia, aby użyć bazy danych programu Microsoft Access Northwind. Połączenia z przykładową bazą danych Northwind programu Access podobny do następującego:
    sConn = "provider=microsoft.jet.oledb.4.0; data source=" & _        "C:\Program Files\Microsoft Office\Office10\Samples\Northwind.mdb"

  4. Otwórz w edytorze tekstu lub edytorze HTML Autoword2.htm i zastąpić odniesienia do TwójSerwerSieciWeb we wszystkich adresach URL nazwy serwera sieci Web.
  5. Uruchom program Internet Explorer. Możesz przeglądać http://YourWebServer/invoice/AutoWord1.htm i http://YourWebServer/invoice/AutoWord2.htm test skrypt. Podczas pierwszej wizyty w witrynie jedną z tych stron, pojawia się monit o pobranie składnika ActiveX.
Składnik ActiveX języka Visual Basic próbki i skrypt są opisane bardziej szczegółowo w następnych sekcjach.

Składnik ActiveX języka Visual Basic

Składnik ActiveX języka Visual Basic, w tym przykładzie współdziała z skryptu strony sieci Web do generowania dokumentu faktury zamówienia na żądanie użytkownika. Aplikacja sieci Web może umożliwić składnik ActiveX uzyskać informacje o kolejności dla identyfikator danego zamówienia lub aplikacji sieci Web mogą wybrać pakiet informacje o zamówieniach w formacie XML i wysłać go do składnika ActiveX do przetwarzania. W każdym przypadku po składnika uzyskuje informacje o zamówieniach, to automatyzacji programu Word do tworzenia i wyświetlania dokumentu faktury dla zamówienia.

(Składnikautomatyzacji programu Word) zawiera jedną klasę, faktury klasa, która udostępnia trzy metody:
  • Metody GetData używa ActiveX Data Objects (ADO) do pobierania informacji o zamówieniu w przykładowej bazie danych Northwind. Informacje zamówienia są przechowywane w m_Data zmienna członka prywatnych. Aby umożliwić ekstrakcji danych występują po stronie klienta można można wywołać metody GetData .
  • Metoda SendData używa programu Microsoft XML (MSXML) do wypełnienia m_Data zmienna członka prywatnych z dostarczonego przez wywołującego informacje o zamówieniach. SendData oczekuje jednego parametru, który reprezentuje obiektu DOMDocument informacji o zamówieniu. Metoda SendData może być wywołana do wysyłania informacji o zamówieniu ze strony sieci Web do składnika. Z tym podejściem aby wyodrębnić danych serwerowe i obecnych klienta z Wyspy danych XML, który może służyć do generowania dokumentu można użyć ASP.
  • MakeInvoice metoda używającego automatyzacji programu Word do utworzenia dokumentu, który zawiera informacje o zamówieniach w m_Data zmienna członka prywatnych. Dokument, który jest przechowywany na serwerze sieci Web jest używana jako punkt początkowy dla faktury. Obiekt wywołujący może wybrać do wyświetlania wypełniony dokument programu Word w poza przeglądarką lub zapisać wypełniony dokument na dysku do późniejszego użycia.
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

Korzystanie ze składnika ActiveX ze strony sieci Web

Autoword1.htm demonstruje, jak można użyć metody GetData umożliwiają składnik ActiveX Pobieranie kolejności danych po stronie klienta i tworzenia dokumentu.

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>

Skrypt autoword1.htm używa składnika ActiveX do wyświetlania wypełniony dokument poza przeglądarką. Można też zapisać wypełniony dokument i wyświetlić go w przeglądarce; jednak wymaga to zapisania dokumentu programu Word na dysku. Składnik można zapisać dokument jako C:\Invoice.doc na lokalnym dysku klienta. Ponieważ składnik ActiveX jest oznaczony jako bezpieczny dla skryptów, klient jest monitowany o potwierdzenie Zapisz.

Jeśli chcesz wyświetlić wypełniony dokument w przeglądarce, Zmień wywołanie MakeInvoice w Autoword1.htm do następującego:
      AutoWord.MakeInvoice "http://YourWebServer/invoice/invoice.doc", True      window.navigate "c:\invoice.doc"

Autoword2.htm przedstawiono, jak można użyć metody SendData do wysyłania danych zamówienia jako obiektu DOMDocument do składnika ActiveX do generowania wypełniony dokument. DOMDocument jest tworzony z Wyspy danych XML, który znajduje się na stronie sieci Web. Dla składnika ActiveX poprawnie przetworzyć informacji zamówienia, wysłanej przez obiekt wywołujący XML musi być poprawnie sformułowany i strukturalną tak, że składnik może zinterpretować go jako informacje o zamówieniach.

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>

W Autoword1.htm i Autoword2.htm należy zauważyć, że składnik ActiveX zostanie uruchomiony w drodze tag < OBJECT > zamiast funkcji CreateObject . Aby włączyć automatyczne pobieranie składników ActiveX dla użytkowników, którzy nie masz już zainstalowany składnik jest celem przy użyciu tagu < OBJECT >. Jeśli użytkownik odwiedza jedną z tych stron i nie zainstalowano składnika, składnik jest pobierany z pliku cabinet (CAB) pod adresem URL, który jest wskazany w atrybucie CODEBASE . W zależności od ustawień zabezpieczeń użytkownika w programie Internet Explorer może najpierw otrzymują monit o potwierdzenie pobierania.

Uwaga: plik CAB, który znajduje się w Autoword.exe utworzono za pomocą kreatora Package and Deployment Wizard dla programu Visual Basic. Składnik ActiveX w pakiecie jest oznaczony jako bezpieczny dla skryptów i inicjowania, ale nie jest podpisany cyfrowo.

Aby uzyskać więcej informacji na temat tworzenia pobierania składnika z Internetu podpisywania cyfrowego i oznakowanie składników jako bezpieczny dla skryptów i inicjowania, zobacz następujące witryny sieci Web Microsoft Developer Network (MSDN):
Podpisywanie i sprawdzania kodu przy użyciu technologii Authenticode
http://msdn2.microsoft.com/en-us/library/ms537364.aspx

Bezpieczne inicjowanie i wykonywanie skryptów formantów ActiveX
http://msdn2.microsoft.com/en-us/library/Aa751977.aspx

Powiązane artykuły

Aby uzyskać dodatkowe informacje, kliknij następujące numery artykułów w celu wyświetlenia tych artykułów z bazy wiedzy Microsoft Knowledge Base:

257757 INFO: automatyzacji pakietu Office dla instalacji nienadzorowanej wykonanie jest niezalecane lub jest obsługiwany

270906 sposób użycia stron ASP do generowania dokument Rich Text Format (RTF) do strumienia do programu Microsoft Word
(c) Microsoft Corporation 2001, wszelkie prawa zastrzeżone. Składek przez Maria B. Turner, firma Microsoft Corporation.
Właściwości

Identyfikator artykułu: 286023 — ostatni przegląd: 16.02.2017 — zmiana: 1

Opinia