Internet Explorer에서 Word 자동화를 위한 VB ActiveX 구성 요소를 사용하는 방법

기술 자료 번역 기술 자료 번역
기술 자료: 286023 - 이 문서가 적용되는 제품 보기.
모두 확대 | 모두 축소

이 페이지에서

요약

이 문서에서는 Internet Explorer에서 렌더링되는 웹 페이지에서 Word의 클라이언트쪽 자동화를 위한 ActiveX 구성 요소를 사용하는 방법을 보여 줍니다. 웹 페이지 자체에 포함된 스크립트 대신 웹 페이지의 ActiveX 구성 요소를 사용하면 여러 가지 이점을 얻을 수 있습니다.
  • Microsoft Word를 자동화하는 Visual Basic 코드가 이미 있는 경우 Visual Basic 프로젝트를 ActiveX EXE 또는 ActiveX DLL로 변환하여 브라우저에서 코드를 재사용할 수 있습니다.
  • Word는 스크립팅에 안전한 것으로 표시되어 있지 않습니다. Internet Explorer의 보안 설정에 따라 스크립트의 Word 자동화 코드가 실행되지 않거나 보안 경고를 알리는 메시지가 나타날 수 있습니다. ActiveX 구성 요소가 특정 지침을 만족한다고 가정하면 스크립팅이 이러한 보안 문제를 방지하기에 안전한 것으로 표시될 수 있습니다.
  • Visual Basic에는 웹 페이지에서 스크립트를 사용할 수 없는 여러 가지 기능이 있습니다. 예를 들어, Visual Basic에는 사용할 수 있지만 웹 페이지 스크립트에는 사용할 수 없는 한 가지 기능은 Windows API(응용 프로그래밍 인터페이스)를 호출하는 기능입니다.
일반적인 개발자 시나리오는 일부 외부 원본이나 논리의 데이터를 사용하여 Word 문서를 만들도록 웹 페이지 인터페이스를 사용자에게 제공하는 것입니다. 서버쪽 Word 자동화를 사용하여 문서를 생성하고 다시 클라이언트로 스트리밍할 수 있지만 Word 자동화가 포함된 서버쪽 방법을 사용하기에는 많은 단점이 있습니다. 주요 단점은 확장성입니다. Word는 리소스를 상당히 집중적으로 사용하는 자동화 서버이므로 웹 서버에서 문서를 생성하는 데 사용하지 않는 것이 좋습니다.

클라이언트에서 문서 생성을 수행하는 ActiveX 구성 요소를 사용하여 웹 서버에서 리소스를 집중적으로 사용하는 Word 자동화를 사용하지 않을 수 있습니다. 이는 이 문서에서 설명하는 예제 ActiveX 구성 요소에서 제공하는 솔루션입니다. 예제는 Word 자동화와 관련된 것이지만 Microsoft Excel 같은 다른 Microsoft Office 응용 프로그램 자동화에도 같은 원칙이 적용될 수 있습니다.

추가 정보

예제 다운로드

AutoWord.exe에는 이 문서에서 설명하는 Visual Basic ActiveX DLL 프로젝트, Word 문서 및 웹 페이지가 포함되어 있습니다.

Microsoft 다운로드 센터에서 다음 파일을 다운로드할 수 있습니다.
Autoword.exe
릴리스 날짜: 2001년 4월 17일

Microsoft 지원 파일을 다운로드하는 방법에 대한 자세한 내용은 Microsoft 기술 자료의 다음 문서를 참조하십시오.
119591 온라인 서비스로부터 Microsoft 지원 파일을 구하는 방법
Microsoft는 파일을 게시한 날짜에 사용할 수 있는 최신의 바이러스 예방 프로그램으로 이 파일을 검사했습니다. 이 파일은 무단 변경을 방지하기 위해 보안이 강화된 서버에 저장됩니다.

예제 설치

Autoword.exe를 다운로드한 후에 다음 단계를 수행하여 예제를 설치합니다.
  1. 웹 서버의 가상 루트 디렉터리에 Invoice라는 폴더를 만듭니다. 기본 가상 루트 디렉터리는 C:\Inetpub\Wwwroot입니다.
  2. Autoword.exe에서 Invoice 폴더로 파일 압축을 풉니다.
  3. 텍스트 또는 HTML 편집기에서 Autoword1.htm을 열고 모든 URL에 있는 YourWebServer에 대한 참조를 웹 서버 이름으로 바꿉니다. 마찬가지로 연결 문자열의 YourSQLServer를 Northwind 예제 데이터베이스가 들어 있는 SQL Server의 이름으로 바꿉니다.

    참고: Northwind 예제 데이터베이스가 있는 SQL Server를 사용할 수 없는 경우 연결 문자열을 수정하여 대신 Microsoft Access Northwind 예제 데이터베이스를 사용할 수 있습니다. Access Northwind 예제 데이터베이스에 대한 연결은 다음과 비슷합니다.
    sConn = "provider=microsoft.jet.oledb.4.0; data source=" & _
            "C:\Program Files\Microsoft Office\Office\Samples\Northwind.mdb"
    					
  4. 텍스트 또는 HTML 편집기에서 Autoword2.htm을 열고 모든 URL에 있는 YourWebServer에 대한 참조를 웹 서버 이름으로 바꿉니다.
  5. Internet Explorer를 시작합니다. http://YourWebServer/invoice/AutoWord1.htm 및 http://YourWebServer/invoice/AutoWord2.htm을 탐색하여 스크립트를 테스트할 수 있습니다. 처음 이러한 페이지를 방문하면 ActiveX 구성 요소를 다운로드할 것인지 묻는 메시지가 나타납니다.
예제 Visual Basic ActiveX 구성 요소와 스크립트는 다음 절에서 자세히 설명합니다.

Visual Basic ActiveX 구성 요소

이 예제의 Visual Basic ActiveX 구성 요소는 웹 페이지 스크립트와 상호 작용하여 사용자가 요청할 때 주문 송장 문서를 생성합니다. 웹 응용 프로그램에서 ActiveX 구성 요소가 해당 주문 ID에 대한 주문 정보를 얻을 수 있도록 허용하거나 웹 응용 프로그램이 XML 같은 주문 정보를 패키지하여 처리를 위해 ActiveX 구성 요소로 보낼 수 있습니다. 두 가지 경우 모두 구성 요소가 주문 정보를 얻은 후에 주문 송장 문서를 만들고 표시하도록 Word를 자동화할 수 있습니다.

ActiveX 구성 요소(AutomateWord)에는 세 가지 메서드를 표시하는 단일 클래스인 Invoice 클래스가 포함되어 있습니다.
  • GetData 메서드는 ADO(ActiveX 데이터 개체)를 사용하여 Northwind 예제 데이터베이스에서 주문에 대한 정보를 추출합니다. 주문 정보는 m_Data 전용 멤버 변수에 저장됩니다. GetData 메서드를 호출하면 클라이언트쪽에서 데이터를 추출할 수 있습니다.
  • SendData 메서드는 Microsoft XML(MSXML)을 사용하여 m_Data 전용 멤버 변수를 호출자가 제공하는 주문 정보로 채웁니다. SendData는 주문 정보에 대한 DOMDocument 개체를 나타내는 한 가지 매개 변수를 필요로 합니다. SendData 메서드를 호출하여 웹 페이지에서 구성 요소로 주문 정보를 보낼 수 있습니다. 이 방법에서는 ASP를 사용하여 데이터를 서버쪽에서 추출하고 문서 생성에 사용할 수 있는 XML 데이터 아일랜드를 클라이언트에 제공할 수 있습니다.
  • MakeInvoice 메서드는 Word 자동화를 사용하여 m_Data 전용 멤버 변수에 주문 정보가 포함된 문서를 만듭니다. 웹 서버에 저장된 문서는 송장의 시작 지점으로 사용됩니다. 호출자는 완성된 Word 문서를 브라우저 외부에 표시하거나 나중에 사용할 목적으로 디스크에 저장할 수 있습니다.
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
				

웹 페이지에서 ActiveX 구성 요소 사용

Autoword1.htm에서는 GetData 메서드를 사용하여 ActiveX 구성 요소가 클라이언트쪽에서 주문 데이터를 검색하고 문서를 만드는 방법을 보여 줍니다.

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>
				
Autoword1.htm의 스크립트는 ActiveX 구성 요소를 사용하여 브라우저 외부에서 완성된 문서를 표시합니다. 또한 완성된 문서를 저장하고 브라우저에서 표시할 수 있지만 이렇게 하려면 Word 문서를 디스크에 저장해야 합니다. 구성 요소는 클라이언트의 로컬 드라이브에서 문서를 C:\Invoice.doc로 저장할 수 있습니다. ActiveX 구성 요소의 스크립트가 안전한 것으로 표시되어 있기 때문에 클라이언트는 저장할 것인지 확인하는 메시지를 표시합니다.

브라우저에서 완성된 문서를 표시하려면 Autoword1.htm에서 MakeInvoice 호출을 다음과 같이 변경합니다.
      AutoWord.MakeInvoice "http://YourWebServer/invoice/invoice.doc", True
      window.navigate "c:\invoice.doc"
				
Autoword2.htm에서는 SendData 메서드를 사용하여 완성된 문서를 생성하기 위해 주문 데이터를 DOMDocument 개체로 ActiveX 구성 요소에 보내는 방법을 보여 줍니다. DOMDocument는 웹 페이지에 있는 XML 데이터 아일랜드에서 만들어집니다. ActiveX 구성 요소가 호출자가 보낸 주문 정보를 제대로 처리하려면 구성 요소가 주문 정보로 해석할 수 있도록 XML이 잘 구성되고 구조화되어 있어야 합니다.

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>
				
Autoword1.htm 및 Autoword2.htm 모두에서 CreateObject 함수 대신 <OBJECT> 태그를 통해 ActiveX 구성 요소가 인스턴스화됩니다. <OBJECT> 태그를 사용하는 목적은 구성 요소를 아직 설치하지 않은 사용자를 위해 ActiveX 구성 요소를 자동으로 다운로드할 수 있도록 하기 위함입니다. 사용자가 이러한 페이지 중 하나를 방문하고 구성 요소가 설치되어 있지 않은 경우 CODEBASE 특성에 표시된 URL에 있는 캐비닛(CAB) 파일에서 구성 요소가 다운로드됩니다. Internet Explorer의 사용자 보안 설정에 따라 먼저 다운로드할 것인지 묻는 메시지가 나타날 수 있습니다.

참고: Autoword.exe에 포함된 CAB 파일은 Visual Basic용 패키지 및 배포 마법사를 사용하여 만들어졌습니다. 패키지에 있는 ActiveX 구성 요소는 스크립팅과 초기화에 안전한 것으로 표시되어 있지만 디지털 서명되어 있지 않습니다.

인터넷 구성 요소 다운로드 만들기, 디지털 서명 및 구성 요소를 스크립팅과 초기화에 안전한 것으로 표시하는 방법에 대한 자세한 내용은 다음 MSDN(Microsoft Developer Network) 웹 사이트를 참조하십시오.
Authenticode를 사용하여 코드 서명 및 확인
http://msdn.microsoft.com/workshop/security/authcode/signing.asp(영문)

ActiveX 컨트롤에 대한 안전한 초기화 및 스크립팅
http://msdn.microsoft.com/workshop/components/activex/safety.asp(영문)

참조

자세한 내용은 Microsoft 기술 자료의 다음 문서를 참조하십시오.
257757 Office의 서버쪽 자동화에 대한 고려 사항
270906 ASP를 사용하여 RTF(서식 있는 텍스트 형식) 문서를 생성하여 Microsoft Word에 스트리밍하는 방법
(c) Microsoft Corporation 2001, All Rights Reserved. 기고: Lori B. Turner, Microsoft Corporation.



Microsoft 제품 관련 기술 전문가들과 온라인으로 정보를 교환하시려면 Microsoft 뉴스 그룹에 참여하시기 바랍니다.

속성

기술 자료: 286023 - 마지막 검토: 2006년 5월 22일 월요일 - 수정: 10.0
본 문서의 정보는 다음의 제품에 적용됩니다.
  • 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
  • Microsoft Word 2002 Standard Edition
  • Microsoft Office Word 2003
키워드:?
kbhowto kbdownload kbautomation KB286023

피드백 보내기

 

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