XSL 서버쪽 사용 Excel XML 스프레드시트 변환 방법

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

요약

Excel 2002 워크시트를 XMLSS를 XML 스프레드시트 형식으로 서식이 지정된 데이터를 추출하는 개발자는 새 XML 기능이 도입되었습니다. Range 개체의 Value 속성에 있는 XMLSS를 셀 서식 및 내용을 반환할 수 있습니다. XMLSS를 제대로 구성되었는지 XML 런타임에 조작 Microsoft XML 파서를 로드할 수 있습니다. 이 기능의 사용 가능성을 한 XML 데이터를 처리할 서버 응용 프로그램 게시하는 것입니다. 이 문서에서는 있는 Excel 통합 문서를 같은 인터페이스를 통합 문서의 범위에서 추출된 XML 데이터를 처리하는 ASP (Active Server Pages) 스크립트 사용되는 한 이러한 예제를 보여 줍니다.

이 문서에서는 Excel 통합, ASP 스크립트를 만들고 모든 시스템 처리 순서를 함께 작동하도록 스타일시트 안내합니다. 단계를 전체에서 각 구성 요소의 설명과 어떻게 전체 솔루션을 기여하는 제공됩니다. 이 문서에서 설명하는 예제 다운로드, 다운로드 방법을 사용할 수도 있습니다. 그리고 이 문서의 끝 부분에 있는 "다운로드" 절을 참조하십시오.

추가 정보

이 샘플에서는 같이 주문 프로세서 작동하려면 여러 다른 구성 요소가 함께 작동하는:
  • ASP 스크립트. 새 주문에 대한 클라이언트 요청을 수행하는 ASP 스크립트를 서버측 구성이 요소입니다. 이 스크립트는 특정 XML 형식으로 요청을 기대하고 있습니다. 스크립트가 XML 정보를 받은 다음 ADO (ActiveX 데이터 개체)를 사용하여 Northwind 샘플 데이터베이스에 새 주문을 추가한 걸립니다.
  • Excel 통합. 주문 입력 워크시트에 있는 Excel 통합 문서 및 ASP 스크립트를 사용하여 사용자의 새 주문을 처리하는 작용하는 매크로 클라이언트 쪽 구성이 요소입니다.
  • XSL 스타일시트. 스타일시트를 Excel XMLSS를 ASP 스크립트에서 필요한 사용자 지정 XML 형식으로 변환합니다. Excel 매크로가 있는 스타일시트를 로드하고 XMLSS를 ASP 스크립트 데이터를 웹 서버에 게시하기 전에 사용자 지정 XML로 변환합니다.

1단계: ASP 주문 처리 스크립트 만들기

기본 루트 폴더를 C:\Inetpub\Wwwroot 즉 웹 서버의 가상 루트 폴더에 OrderProc 라는 폴더를 새로 만듭니다. OrderProc 폴더에서 스크립트를 사용하여 OrderEntry.asp 라는 새 파일을 만듭니다. 샘플에서는 Northwind Access 데이터베이스에 스크립트를 사용하는, Office 설치 일치하는 연결 문자열 (sConn) 에 Northwind.mdb 경로를 수정해야 할 수 있습니다.
<%@ Language="vbscript" CodePage="65001"%>

<%
    Response.Buffer = True
    Response.ContentType = "text/xml"
  
    Dim oDataXML                    'Custom Data XML passed in by caller.
    Dim oConn                       'ADO Connection to Northwind database.
    Dim oOrdersRS, oDetailsRS       'ADO Recordsets for the Orders table and Order Details Table.
    Dim oItems                      'Collection of nodes meeting the match. "Order/Items/Item"
    Dim oItem                       'Single node in oItems.
    Dim sCustID                     'Customer ID for the new order.
    Dim sOrderID                    'Order ID of the newly created record. in Orders table
    Dim sStatus                     'Status of order processing.
    Dim bContinue                   'Flag that indicates whether or not to continue processing the order.

    Const sConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\program files\microsoft office\office10\samples\northwind.mdb"
    On Error Resume Next

    'Load the XML passed into the request.
    Set oDataXML = Server.CreateObject("Microsoft.XMLDOM")
    oDataXML.Load Request
    bContinue = True

    'Obtain the Customer ID. If no customer id is provided, report an error.
    sCustID = oDataXML.selectSingleNode("Order/CustomerID").Text
    If sCustID="" Then
       sStatus = "There is no customer specified for the order"
       bContinue = False
    End If

    'Obtain collection of "items" for this order. If the item count = 0, report an error.
    If bContinue Then
       Set oItems = oDataXML.SelectNodes("Order/Items/Item")
       if oItems.length = 0 Then
          sStatus = "There are no items to process for this order"
          bContinue = False
       End If
    End If

    'Open a connection to the Northwind database.
    If bContinue Then
       Set oConn = CreateObject("ADODB.Connection")
       oConn.Open sConn
       if err.Number <> 0 Then
          sStatus = err.Description
          bContinue = False
       end if

    End If

    'Open the Orders and Order Details tables and add the new records.
    If bContinue Then

       Set oOrdersRS = CreateObject("ADODB.Recordset")
       oOrdersRS.Open "SELECT * FROM Orders", oConn, 2, 3
       Set oDetailsRS = CreateObject("ADODB.Recordset")
       oDetailsRS.Open "SELECT * FROM [Order Details]", oConn, 2, 3

       'Add a new entry in the Orders table.
       oOrdersRS.AddNew
       oOrdersRS.Fields("CustomerID").Value = sCustID
       oOrdersRS.Fields("OrderDate").Value = CDate(Now)
       oOrdersRS.Update
       sOrderID = oOrdersRS.Fields("OrderID").Value
        
       'And a new record for each item in the order XML to the Order Details table.
       If err.number = 0 Then
          For Each oItem In oItems
              oDetailsRS.AddNew
              oDetailsRS.Fields("OrderID").Value = sOrderID
              oDetailsRS.Fields("ProductID").Value = oItem.childnodes(0).Text
              oDetailsRS.Fields("Quantity").Value = CLng(oItem.childnodes(1).Text)
              oDetailsRS.Fields("UnitPrice").Value = CLng(oItem.childnodes(2).Text)
              oDetailsRS.Fields("Discount").Value = 0
              oDetailsRS.Update
          Next
       End If

       if err.Number <> 0 Then
          sStatus = err.Description
       else
          sStatus = "Success"
       end if

       'Close the recordsets and connection.
       oDetailsRS.Close
       oOrdersRS.Close
       oConn.Close

    End If
  
    'Return the resulting XML (the Order status).
    Dim sResult
    sResult = "<?xml version=""1.0""?>"
    sResult = sResult & "<OrderProcessed>" 
    sResult = sResult & "<Status>" & sStatus & "</Status>"
    sResult = sResult & "<OrderID>" & sOrderID & "</OrderID>"
    sResult = sResult & "</OrderProcessed>"
    Response.Write sResult
    Response.End
 
%> 
				
다음과 같은 구조적 XML 데이터를 예상하는 이 ASP 스크립트를 성공적으로 순서를 요청을 처리할 수:

<?xml version="1.0"?>
<Order>
    <CustomerID>BOTTM</CustomerID>
    <Items>
        <Item>
            <ProductID>4</ProductID>
            <Quantity>11</Quantity>
            <Price>20.25</Price>
        </Item>
        <Item>
            <ProductID>18</ProductID>
            <Quantity>2</Quantity>
            <Price>63.7</Price>
        </Item>
    </Items>
</Order>
					
이 XML "BOTTM" ID 고객 주문을 지정합니다. 두 항목 순서를 들어: 4, ID 11 단위 제품 및 제품 2 단위 18 ID.

ASP 스크립트를 클라이언트가 이를 유효한 주문 정보를 제공하는 있어야 하기 위해 일부 오류 처리를 수행합니다. 클라이언트가 사용자 ID 및 하나 이상의 항목을 지정해야 합니다. 그리고 이러한 조건이 충족되지 않은 경우 ASP 스크립트에서 순서를 처리할 오류를 반환합니다.

ASP 스크립트를 XML 데이터 순서를 요청을 변경한 클라이언트에게 반환합니다. 이 XML 주문 처리 성공 여부를 나타내는 및 성공 순서 번호를 제공합니다.

<?xml version="1.0"?>
<OrderProcessed>
    <Status>Success</Status>
    <OrderID>11078</OrderID>
</OrderProcessed>
					

2단계: Order Entry 통합 인터페이스 만들기

  1. Excel에서 통합 문서를 새로 시작하십시오.
  2. 레이블을 셀 A1과 A3에, B3, C3 다음과 같이 입력합니다:
    A1:   Customer ID    B1:                C1:
    A2:                  B2:                C2:
    A3:   Product ID     B3:   Quantity     C3:   Price
    					
  3. 셀 A1:B1을 선택하십시오. 삽입 메뉴에서 이름 가리킨 다음 만들기 를 클릭하십시오. 이름 만들기 대화 상자에서 왼쪽 열 선택하고 확인 을 클릭하십시오. 셀 B1의 정의된 이름을 Customer_ID 만듭니다.
  4. 셀 A3:C8을 선택하십시오. 삽입 메뉴에서 이름 가리킨 다음 만들기 를 클릭하십시오. 이름 만들기 대화 상자에서 첫 행 선택하고 확인 을 클릭하십시오. 이 셀 A4:A8, B4:B8, C4:C8 및 정의된 이름을 Product_ID, 수량가격 각각 만듭니다.
  5. VBA 편집기를 시작하려면 Alt + F11 키를 누릅니다.
  6. Visual Basic 편집기의 삽입 메뉴에서 모듈 을 클릭하십시오. 코드 모듈에 다음 매크로를 추가합니다:
    Sub ProcessOrder()
    
        Const sFolder = "http://YourWebServer/OrdrProc/"
    
        'Load a new DOMDocument based on the XMLSS of the range A1:C8.
        Dim oRangeXML
        Set oRangeXML = CreateObject("Microsoft.XMLDOM")
        oRangeXML.LoadXML Range("A1:C8").Value(xlRangeValueXMLSpreadsheet)
            
        'Transform the XMLSS to custom XML that the ASP can
        'interpret as a new "order".
        Dim oXSL, oOrderXML
        Set oXSL = CreateObject("Microsoft.XMLDOM")
        oXSL.Load ThisWorkbook.Path & "\OrderEntry.xsl"
        Set oOrderXML = CreateObject("Microsoft.XMLDOM")
        oRangeXML.transformNodeToObject oXSL, oOrderXML
        
        'Submit the XMLSS to the ASP page for processing.
        Set oXMLHTTP = CreateObject("Microsoft.XMLHTTP")
        oXMLHTTP.Open "Post", sFolder  & "/OrderEntry.asp", False
        oXMLHTTP.setRequestHeader "Content-Type", "text/xml; charset=""UTF-8"""
        oXMLHTTP.send oOrderXML
        
        'Retrieve the results of the processing by the ASP page.
        Dim oResult
        Set oResult = CreateObject("Microsoft.XMLDOM")
        oResult.Load oXMLHTTP.responseXML
    
        'Check the returned XML -- if the Status is "Success", fill in the
        'Order # and display a message. If the Status is not "Success",
        'report the error.
        Dim sStatus As String
        sStatus = oResult.selectsinglenode("OrderProcessed/Status").Text
        If sStatus = "Success" Then
            MsgBox "Thank you. Your order number is " & _
                oResult.selectsinglenode("OrderProcessed/OrderID").Text
        Else
            MsgBox sStatus
        End If
    
    End Sub
    					
    참고: 웹 서버의 이름을 sFolder 상수에 변경 YourWebServer.

  7. VBA 편집기를 닫고 Excel로 반환하십시오.
  8. Invoice1.xls 같이 이전에 만든 OrdrProc 폴더에 통합 문서를 저장하십시오.
기본적으로 셀 A1:C8 "주문 양식을" 것입니다. 매크로 주문 양식을 XMLSS를 검색하고 새 DOMDocument 개체로 로드합니다. 다음 프로그램으로 다른 DOMDocument 확장 가능한 스타일시트 언어 (XSL) 스타일시트를 로드하고 ASP는 파일로 새 주문을 해석할 수 있는 XML 구조를 사용하여 XMLSS를 변환합니다. 매크로 XMLHTTP 개체를 ASP 스크립트를 위해 XML 웹 서버에 게시하는 데 사용됩니다. ASP 스크립트의 순서를 처리하고 매크로에 주문 상태 정보에 대한 자세한 XML을 반환합니다.

참고: 클라이언트 쪽 매크로 코드를 사용자 지정 순서 XML에 XMLSS를 변환하는 작업을 디자인 선택 이름으로 지정됩니다. 또한 ASP 스크립트 XMLSS를 게시하고 ASP 변환을 수행할 수 있습니다.

3 단계: 해당 스타일시트 만들기

OrdrProc 폴더의 OrderEntry.xsl 라는 이름의 새 파일을 만들고 다음 XSL 코드를 붙여 넣습니다.
<?xml version='1.0'?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">

  <xsl:template match="/">
    <xsl:pi name="xml">version="1.0"</xsl:pi>

    <Order>
      <CustomerID><xsl:value-of select="Workbook/Worksheet/Table/Row/Cell[NamedCell[@ss:Name='Customer_ID'] $and$ Data[@ss:Type!='Error']]"/></CustomerID>
      <Items>
        <xsl:for-each select="Workbook/Worksheet/Table/Row[Cell[NamedCell[@ss:Name='Product_ID'] $and$ Data[@ss:Type!='Error']]]">
          <Item>
            <xsl:apply-templates/>
          </Item>
        </xsl:for-each>
      </Items>
    </Order>

  </xsl:template>

  <xsl:template match="Cell[NamedCell[@ss:Name='Product_ID']]">
    <ProductID><xsl:value-of select="Data"/></ProductID>
  </xsl:template>

  <xsl:template match="Cell[NamedCell[@ss:Name='Quantity']]">
    <Quantity><xsl:value-of select="Data"/></Quantity>
  </xsl:template>

  <xsl:template match="Cell[NamedCell[@ss:Name='Price']]">
    <Price><xsl:value-of select="Data"/></Price>
  </xsl:template>

</xsl:stylesheet>
				
XMLSS를 사용자 지정 순서 1 단계에서 파일(삽화)(영어) XML에 다음과 같은 경우 XSL 변환:
  • XSL 포함되어 있는 <namedcell><cell>노드와 자식 노드를 <data>만날 때까지 노드 계층 구조를 통과하는 고객 ID 찾습니다. <namedcell>ss:Name 특성 'Customer_ID' 로 동일하게 있고 해당 <data>'오류' 같지 않은 ss:Type 특성이 있는 확인합니다.
  • 주문 항목을 찾으려면 XSL 'Product_ID' ss:Name 특성 가진 <namedcell>자식 노드 및 '오류' 가 아닌 ss:Type 특성이 <data>자식 노드를 포함하는 모든 <row>노드를 <cell>노드를 찾습니다.
  • 각 <row>XSL 결정하는 항목입니다에 대한 순서, XSL 서식 파일 'Product_ID', '개수' 및 '가격' ss:Name 특성을 <namedcell>노드를 비교합니다.

4단계: 새 주문 처리 예제 코드 실행

  1. Excel에서 Invoice1.xls 반환하십시오.
  2. 주문 입력 시뮬레이션하려면 Sheet1 고객 및 제품 정보를 아래와 같이 업데이트:
    A1:   Customer ID    B1:   BOTTM        C1:
    A2:                  B2:                C2:
    A3:   Product ID     B3:   Quantity     C3:   Price
    A4:   4              B4:   11           C4:   20.25
    A5:   18             B5:   2            C5:   63.70
    					
    참고: 이 샘플에서는 For 성공적으로 순서를 처리하는 데 올바른 고객 및 제품 ID ASP 스크립트 입력해야 합니다.

  3. 도구 메뉴에서 매크로 를 가리킨 다음 매크로 클릭하십시오. 목록에서 ProcessOrder 매크로를 선택한 다음 실행 을 클릭하십시오.
  4. ASP 스크립트를 성공적으로 순서를 처리하는 경우 새 주문 번호를 메시지가 나타납니다. Microsoft Access를 시작하고 Northwind 예제 데이터베이스를 엽니다. ASP에서 반환된 주문 ID Orders 테이블에 새 항목이 표시되어야 합니다. 동일한 주문 ID에 대한 주문 정보 테이블의 두 새 항목을 참조합니다 Access 종료하고 Excel에서 Invoice1.xls 반환하십시오.
  5. 고객 ID B1 셀의 선택을 취소하고 매크로를 다시 실행하십시오. 이 시간 서버가 순서를 처리할 수 없습니다. 및 고객 ID 제공할 것을 나타내는 오류를 반환합니다.

다운로드

ExcelXML.exe는 Invoice1.xls 향상된 버전의 물론 이 문서에 설명된 샘플이 들어 있습니다. Invoice2.xls 같은 Invoice1.xls 같은 ASP 스크립트 및 XSL 스타일시트를 사용합니다. 그러나 Invoice2.xls 워크시트 보호, 데이터 유효성 검사 및 VLOOKUP 수식이 친숙한 주문 양식을 제공할 수 있습니다 (예: 추가 Excel 기능을 보여 줍니다.

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

Microsoft 지원 파일을 다운로드하는 방법에 대한 자세한 내용은 Microsoft 기술 자료의 다음 문서를 참조하십시오.
119591온라인 서비스로부터 Microsoft 지원 파일 구하는 방법
Microsoft는 이 파일에 대한 바이러스를 검색합니다. Microsoft는 파일을 게시한 날짜에 사용할 수 있었던 최신 바이러스 검색 소프트웨어가 사용됩니다. 해당 파일을 무단으로 변경할 수 없는 보안이 향상된 서버에 보관됩니다.

참조

XML 및 ASP 사용하여 서버측 솔루션을 만드는 방법에 대한 자세한 내용은 다음 MSDN) Microsoft 개발자 네트워크 (웹 사이트를 참조하십시오.
XML 소개
http://www.microsoft.com/learning/en/us/syllabi/2500AFinal.mspx

XML 자습서
http://msdn.microsoft.com/en-us/library/ms950712.aspx

XSL 개발자 가이드
http://msdn.microsoft.com/en-us/library/ms862738.aspx

클라이언트와 서버 간의 XML 보내기
http://msdn.microsoft.com/en-us/library/ms763733.aspx

자세한 내용은 Microsoft 기술 자료 문서를 보려면 해당 자료의 문서를 참조하십시오.
288215정보: Excel 2002 및 XML
285891Visual Basic 또는 ASP Excel 2002 XML 스프레드시트 만들기 방법
288130ASP 클라이언트 쪽 표시 XML 스프레드시트 작성 방법
(예약된 모든 권한 c) Microsoft Corporation 2001년. 강영수는 B. Turner, Microsoft Corporation에 의해 기고물입니다.

속성

기술 자료: 278976 - 마지막 검토: 2007년 1월 29일 월요일 - 수정: 4.8
본 문서의 정보는 다음의 제품에 적용됩니다.
  • Microsoft Visual Basic 6.0 Professional Edition
  • Microsoft Excel 2002 Standard Edition
키워드:?
kbmt kbdownload kbdownload kbfile kbhowto KB278976 KbMtko
기계 번역된 문서
중요: 본 문서는 전문 번역가가 번역한 것이 아니라 Microsoft 기계 번역 소프트웨어로 번역한 것입니다. Microsoft는 번역가가 번역한 문서 및 기계 번역된 문서를 모두 제공하므로 Microsoft 기술 자료에 있는 모든 문서를 한글로 접할 수 있습니다. 그러나 기계 번역 문서가 항상 완벽한 것은 아닙니다. 따라서 기계 번역 문서에는 마치 외국인이 한국어로 말할 때 실수를 하는 것처럼 어휘, 구문 또는 문법에 오류가 있을 수 있습니다. Microsoft는 내용상의 오역 또는 Microsoft 고객이 이러한 오역을 사용함으로써 발생하는 부 정확성, 오류 또는 손해에 대해 책임을 지지 않습니다. Microsoft는 이러한 문제를 해결하기 위해 기계 번역 소프트웨어를 자주 업데이트하고 있습니다.

피드백 보내기

 

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