วิธีการใช้คอมโพเนนต์ VB ActiveX สำหรับการดำเนินการอัตโนมัติ Word จาก Internet Explorer

การแปลบทความ การแปลบทความ
หมายเลขบทความ (Article ID): 286023 - ผลิตภัณฑ์ที่เกี่ยวข้องในบทความนี้
ขยายทั้งหมด | ยุบทั้งหมด

เนื้อหาบนหน้านี้

สรุป

บทความนี้อธิบายวิธีการที่คุณสามารถใช้ ActiveX ส่วนประกอบสำหรับฝั่งไคลเอ็นต์ทำงานอัตโนมัติของ Word จากเว็บเพจที่แสดงใน Internet Explorer มีข้อดีหลายเพื่อใช้เป็นคอมโพเนนต์ ActiveX จากเว็บเพจแทนของสคริปต์ที่ฝังอยู่ในเว็บเพจเอง:
  • ถ้าคุณมีโค้ด Visual Basic ที่ automates Microsoft Word คุณสามารถใช้รหัสของคุณในเบราว์เซอร์ได้ ด้วยการแปลงโครงการ Visual Basic ของคุณมี EXE ActiveX หรือ DLL ActiveX ข้อ
  • word จะไม่ทำเครื่องหมายปลอดภัยสำหรับสร้างสคริปต์ ทั้งนี้ขึ้นอยู่กับการตั้งค่าความปลอดภัยใน Internet Explorer รหัสการทำงานอัตโนมัติของ Word ในสคริปต์อาจไม่ทำงาน หรืออาจได้รับพร้อมท์ผู้ใช้ที่ มีคำเตือนการรักษาความปลอดภัย สันนิษฐานว่าคอมโพเนนต์ ActiveX ของคุณมีคุณสมบัติตรงตามคำแนะนำบาง ดังกล่าวอาจถูกทำเครื่องหมายปลอดภัยสำหรับสร้างสคริปต์เพื่อหลีกเลี่ยงปัญหาด้านความปลอดภัยเหล่านี้
  • visual Basic มีคุณลักษณะหลายอย่างที่คุณไม่สามารถใช้ได้กับสคริปต์ในเว็บเพจ ตัวอย่างเช่น หนึ่งคุณลักษณะที่พร้อมใช้งานเพื่อ Visual Basic แต่ไม่ให้สคริปต์ของเว็บเพจที่มีความสามารถในการเรียกใช้อินเทอร์เฟซ Windows โปรแกรมประยุกต์โปรแกรมสำหรับ (API)
สถานะการณ์จำลองผู้พัฒนาทั่วไปจะแสดงผู้ใช้กับอินเทอร์เฟซของเว็บเพจสำหรับการสร้างเอกสาร Word โดยใช้ข้อมูลจากแหล่งภายนอกหรือตรรกะบางส่วน แม้ว่าคุณสามารถใช้การทำงานอัตโนมัติของ Word ฝั่งเซิร์ฟเวอร์ในการสร้างเอกสารและกระแสข้อมูลดังกล่าวกลับไปยังไคลเอนต์ คุณจะ drawbacks จำนวนมากใช้วิธีการด้านเซิร์ฟเวอร์ที่เกี่ยวข้องกับการทำงานอัตโนมัติของ Word drawback ที่หลักคือ scalability; Word เป็นเซิร์ฟเวอร์ Automation มากทรัพยากรสูง และไม่แนะนำสำหรับการสร้างเอกสารบนเว็บเซิร์ฟเวอร์

โดยใช้คอมโพเนนต์ ActiveX ที่ทำการสร้างเอกสารที่ไคลเอ็นต์ คุณสามารถย้าย Automation Word สูงทรัพยากรออกจากเว็บเซิร์ฟเวอร์ นี่คือวิธีการแก้ไขปัญหาที่มีการแสดง โดยคอมโพเนนต์ ActiveX ตัวอย่างที่กล่าวถึงในบทความนี้ หลักการเดียวกันอาจจะใช้สำหรับอัตโนมัติ Microsoft Office อื่น ๆ แม้ว่าตัวอย่างมีการทำงานอัตโนมัติของ Word โปรแกรมประยุกต์ เช่น Microsoft Excel ได้

ข้อมูลเพิ่มเติม

ตัวอย่างในการดาวน์โหลด

AutoWord.exe ประกอบด้วยโครงการ Visual Basic ActiveX DLL, Word เอกสาร และเว็บเพจที่มีการอธิบายไว้ในบทความนี้

แฟ้มต่อไปนี้สามารถดาวน์โหลดได้จากศูนย์ดาวน์โหลดของ Microsoft::
Autoword.exe
วันวางจำหน่าย: 17 เมษายน 2001

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับวิธีการดาวน์โหลดแฟ้มสนับสนุนของ Microsoft โปรดคลิกหมายเลขบทความต่อไปนี้เพื่อดูบทความใน Microsoft Knowledge Base::
119591วิธีรับแฟ้มการสนับสนุนของไมโครซอฟท์จากบริการออนไลน์
Microsoft สแกนแฟ้มนี้เพื่อหาไวรัส Microsoft ใช้ซอฟต์แวร์ตรวจสอบไวรัสล่าสุด ณ วันที่มีการประกาศแฟ้มนั้นๆ แฟ้มดังกล่าวจะถูกเก็บในเซิร์ฟเวอร์เพิ่มการรักษาความปลอดภัย ซึ่งช่วยป้องกันการเปลี่ยนแปลงแก้ไขแฟ้มโดยไม่ได้รับอนุญาต

ตั้งค่าตัวอย่างนี้

หลังจากที่คุณดาวน์โหลด Autoword.exe ทำตามขั้นตอนเหล่านี้เพื่อตั้งค่าตัวอย่าง:
  1. สร้างโฟลเดอร์ชื่ออินวอยซ์ในไดเรกทอรีรากเสมือนของเว็บเซิร์ฟเวอร์ของคุณ (ไดเรกทอรีรากเสมือนเป็นค่าเริ่มต้นคือ C:\Inetpub\Wwwroot)
  2. แยกแฟ้มใน Autoword.exe ออกอินวอยซ์โฟลเดอร์
  3. เปิด Autoword1.htm ในข้อความหรือตัวแก้ไข HTML และแทนการอ้างอิงถึงYourWebServerใน url ทั้งหมดด้วยชื่อของเว็บเซิร์ฟเวอร์ likewise แทนYourSQLServerในสายอักขระการเชื่อมต่อด้วยชื่อของ SQL Server ที่ประกอบด้วยฐานข้อมูลตัวอย่างของ Northwind

    หมายเหตุ:: ถ้าคุณไม่ได้เป็น SQL Server ที่พร้อมใช้งาน ด้วย Northwind ในฐานข้อมูลตัวอย่าง คุณสามารถแก้ไขสายอักขระการเชื่อมต่อการใช้ฐานข้อมูลตัวอย่างของ Microsoft Access Northwind แทนได้ การเชื่อมต่อกับ Northwind เข้าถึง ฐานข้อมูลตัวอย่างมีลักษณะดังต่อไปนี้:
    sConn = "provider=microsoft.jet.oledb.4.0; data source=" & _
            "C:\Program Files\Microsoft Office\Office10\Samples\Northwind.mdb"
    					
  4. เปิด Autoword2.htm ในข้อความหรือตัวแก้ไข HTML และแทนการอ้างอิงถึงYourWebServerใน url ทั้งหมดด้วยชื่อของเว็บเซิร์ฟเวอร์
  5. เริ่ม Internet Explorer คุณสามารถเรียกดูการ http://YourWebServer/invoice/AutoWord1.htm http://YourWebServer/invoice/AutoWord2.htm เพื่อทดสอบสคริปต์ เมื่อคุณเป็นอันดับแรกไปอย่างใดอย่างหนึ่งเพจเหล่านี้ คุณได้รับพร้อมท์ให้ดาวน์โหลด ActiveX คอมโพเนนต์
คอมโพเนนต์ ActiveX Visual Basic ของตัวอย่างและสคริปต์ได้อธิบายไว้ในรายละเอียดเพิ่มเติมในหัวข้อตาม

คอมโพเนนต์ ActiveX ของ visual Basic

คอมโพเนนต์ ActiveX Visual Basic ในตัวอย่างนี้ interacts กับสคริปต์ของเว็บเพจที่สร้างในเอกสารใบแจ้งหนี้ของใบสั่งที่ร้องขอของผู้ใช้ โปรแกรมประยุกต์เว็บที่อาจทำให้เกิดการเรียกใช้คอมโพเนนต์ ActiveX เพื่อขอรับข้อมูลของใบสั่งสำหรับหมายเลขใบสั่งที่กำหนดเป็น หรือแอพลิเคชันเว็บอาจเลือกที่จะแพ็คเกจข้อมูลใบสั่งเป็น XML และส่งไปยังคอมโพเนนต์ ActiveX สำหรับการประมวลผล การทำไม่ว่ากรณี ใดหลังจากที่คอมโพเนนต์การขอรับข้อมูลใบสั่ง คุณสามารถให้ Word เพื่อสร้าง และแสดงเอกสารใบแจ้งหนี้สำหรับใบสั่ง

(ของคอมโพเนนต์ ActiveXAutomateWord) ประกอบด้วยคลาสที่เดียว การใบแจ้งหนี้คลา ที่ exposes สามวิธี:
  • กระบวนการGetDataวิธีใช้วัตถุข้อมูล ActiveX (ADO) เพื่อแยกข้อมูลเกี่ยวกับใบสั่งในฐานข้อมูลตัวอย่างของ Northwind ข้อมูลใบสั่งถูกเก็บอยู่ในนั้นm_Dataprivate member variable. กระบวนการGetDatamethod can be called to let the data extraction occur client-side.
  • กระบวนการSendDatamethod uses Microsoft XML (MSXML) to fill them_Dataprivate member variable with the order information that is provided by the caller.SendDataexpects one parameter that represents aDOMDocumentobject for the order information. กระบวนการSendDatamethod can be called to send the order information from the Web page to the component. With this approach, you can use ASP to extract the data server-side and present the client with an XML data island that can be used for the document generation.
  • กระบวนการMakeInvoicemethod uses Word Automation to build a document that contains the order information in them_Dataprivate member variable. A document that is stored on the Web server is used as a starting point for the invoice. The caller may choose to display the completed Word document outside of the browser or save the completed document to a disk for later use.
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
				

Using the ActiveX Component from a Web Page

Autoword1.htm demonstrates how you can use theGetDatamethod to let the ActiveX component retrieve the order data client-side and build the 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>
				
The script in Autoword1.htm uses the ActiveX component to display the completed document outside of the browser. You may also choose to save the completed document and display it in the browser; however, doing so requires that the Word document be saved to a disk. The component can save the document as C:\Invoice.doc on the client's local drive. Because the ActiveX component is marked safe for scripting, the client is prompted to confirm the save.

If you want to display the completed document in the browser, change the call toMakeInvoicein Autoword1.htm to the following:
      AutoWord.MakeInvoice "http://YourWebServer/invoice/invoice.doc", True
      window.navigate "c:\invoice.doc"
				
Autoword2.htm demonstrates how you can use theSendDatamethod to send the order data as aDOMDocumentobject to the ActiveX component for generating the completed document. กระบวนการDOMDocumentis created from an XML data island that resides on the Web page. For the ActiveX component to properly process the order information that is sent by the caller, the XML must be well-formed and structured so that the component can interpret it as order information.

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>
				
In both Autoword1.htm and Autoword2.htm, you should note that the ActiveX component is instantiated by way of an <object> tag rather than the </object>CreateObjectฟังก์ชัน The purpose of using the <object> tag is to enable automatic download of the ActiveX component for users that do not already have the component installed. If a user visits one of these pages and the component is not installed, the component is downloaded from the cabinet (CAB) file at the URL that is indicated in the </object>CODEBASEแอตทริบิวต์ Depending on the user's security settings in Internet Explorer, they may first receive a prompt to confirm the download.

หมายเหตุ:: The CAB file that is included in Autoword.exe was created with the Package and Deployment Wizard for Visual Basic. The ActiveX component in the package is marked safe for scripting and initialization, but is not digitally signed.

For more information on creating Internet component downloads, digital signing, and marking components as safe for scripting and initialization, see the following Microsoft Developer Network (MSDN) Web sites:
Signing and Checking Code with Authenticode
http://msdn2.microsoft.com/en-us/library/ms537364.aspx

การเตรียมใช้งานที่ปลอดภัยและการเขียนสคริปต์สำหรับการควบคุม ActiveX
http://msdn2.microsoft.com/en-us/library/Aa751977.aspx

ข้อมูลอ้างอิง

หากต้องการทราบข้อมูลเพิ่มเติม โปรดคลิกที่หมายเลขบทความต่อไปนี้เพื่อดูบทความใน Microsoft Knowledge Base::
257757ข้อมูล: ทำงานอัตโนมัติของ Office สำหรับการดำเนินการทำงานอัตโนมัติจะไม่มีการแนะนำหรือ Supported
270906วิธีการใช้ ASP เพื่อสร้างเอกสารการจัดรูปแบบ (RTF) Rich Text ไปกระแสข้อมูลไปยัง Microsoft Word
(c) Microsoft Corporation 2001 สิทธิ์ทั้งหมดที่สำรองไว้ contributions โดย Lori B. Turner, Microsoft Corporation

คุณสมบัติ

หมายเลขบทความ (Article ID): 286023 - รีวิวครั้งสุดท้าย: 6 ตุลาคม 2554 - Revision: 4.0
ใช้กับ
  • Microsoft Office Word 2007
  • Microsoft Word 2002 Standard Edition
  • Microsoft Word 2000 Standard Edition
  • Microsoft Visual Basic 6.0 Professional Edition
Keywords: 
kbdownload kbautomation kbhowto kbmt KB286023 KbMtth
แปลโดยคอมพิวเตอร์
ข้อมูลสำคัญ: บทความนี้แปลโดยซอฟต์แวร์การแปลด้วยคอมพิวเตอร์ของ Microsoft แทนที่จะเป็นนักแปลที่เป็นบุคคล Microsoft มีบทความที่แปลโดยนักแปลและบทความที่แปลด้วยคอมพิวเตอร์ เพื่อให้คุณสามารถเข้าถึงบทความทั้งหมดในฐานความรู้ของเรา ในภาษาของคุณเอง อย่างไรก็ตาม บทความที่แปลด้วยคอมพิวเตอร์นั้นอาจมีข้อบกพร่อง โดยอาจมีข้อผิดพลาดในคำศัพท์ รูปแบบการใช้ภาษาและไวยากรณ์ เช่นเดียวกับกรณีที่ชาวต่างชาติพูดผิดเมื่อพูดภาษาของคุณ Microsoft ไม่มีส่วนรับผิดชอบต่อความคลาดเคลื่อน ความผิดพลาดหรือความเสียหายที่เกิดจากการแปลเนื้อหาผิดพลาด หรือการใช้บทแปลของลูกค้า และ Microsoft มีการปรับปรุงซอฟต์แวร์การแปลด้วยคอมพิวเตอร์อยู่เป็นประจำ
ต่อไปนี้เป็นฉบับภาษาอังกฤษของบทความนี้:286023

ให้ข้อเสนอแนะ

 

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