Làm th? nào đ? s? d?ng XSL đ? chuy?n đ?i b?ng tính Excel XML cho phía máy ch? s? d?ng

D?ch tiêu đ? D?ch tiêu đ?
ID c?a bài: 278976 - Xem s?n ph?m mà bài này áp d?ng vào.
Bung t?t c? | Thu g?n t?t c?

TÓM T?T

Excel 2002 gi?i thi?u ch?c năng XML m?i cho phép các nhà phát tri?n đ? gi?i nén đ?nh d?ng d? li?u t? b?ng trong m?t đ?nh d?ng XML b?ng tính (XMLSS). Các Giá trị b?t đ?ng s?n c?a m?t Ph?m vi đ?i tư?ng có th? tr? v? di đ?ng đ?nh d?ng và n?i dung trong XMLSS. XMLSS là t?t đư?c h?nh thành XML có th? đư?c n?p b?i nh?ng phân tích cú pháp XML Microsoft cho thao tác lúc ch?y. M?t ti?m năng s? d?ng tính năng này là đ? g?i d? li?u XML đ? m?t ?ng d?ng máy ch? đ? x? l?. Bài vi?t này minh ho? m?t ví d?, trong đó m?t b?ng tính Excel đư?c s? d?ng như là m?t giao di?n cho m?t k?ch b?n Active Server Pages (ASP) mà x? l? d? li?u XML đư?c trích xu?t t? m?t ph?m vi trong m?t b?ng tính.

Bài vi?t này hư?ng d?n b?n thông qua vi?c t?o ra m?t b?ng tính Excel, m?t k?ch b?n ASP và m?t stylesheet r?ng t?t c? làm vi?c v?i nhau như m?t l?nh h? th?ng x? l?. Trong su?t các bư?c, gi?i thích c?a m?i thành ph?n và làm th? nào nó góp ph?n vào các gi?i pháp toàn b? đư?c đưa ra. M?u đư?c mô t? trong bài vi?t này là c?ng có s?n đ? t?i v?; đ? t?i hư?ng d?n, xem ph?n "T?i v?" ? ph?n cu?i c?a bài vi?t này.

THÔNG TIN THÊM

Trong m?u này, m?t s? thành ph?n khác nhau làm vi?c cùng nhau đ? ho?t đ?ng như m?t b? x? l? đơn đ?t hàng:
  • ASP Script. Các thành ph?n phía máy ch? là m?t k?ch b?n ASP m?t khách hàng yêu c?u cho các đơn đ?t hàng m?i. Các k?ch b?n s? yêu c?u đ? trong m?t đ?nh d?ng XML c? th?. Đo?n m? s? đưa thông tin t? các XML r?ng nó s? nh?n đư?c và cho bi?t thêm m?t tr?t t? m?i Northwind m?u cơ s? d? li?u b?ng cách s? d?ng ActiveX Data Objects (ADO).
  • Excel Workbook. Các thành ph?n phía khách hàng là m?t b?ng tính Excel có ch?a m?t b?ng cho đơn đ?t hàng nh?p c?nh và m?t v? mô mà tương tác v?i các t?p l?nh ASP đ? x? l? tr?t t? m?i c?a ngư?i dùng.
  • XSL Stylesheet. M?t t? ki?u dáng bi?n Excel đ? đ?nh d?ng XML tùy ch?nh mà k?ch b?n ASP yêu c?u XMLSS. Excel v? mô t?i stylesheet và bi?n đ?i XMLSS đ? tùy ch?nh XML trư?c đ? g?i d? li?u đ? k?ch b?n ASP trên máy ch? Web.

Bư?c 1: T?o các t?p l?nh x? l? ASP Order

T?o m?t thư m?c m?i tên là OrderProc trong thư m?c ?o g?c c?a máy ch? Web c?a b?n (thư m?c g?c m?c đ?nh là C:\Inetpub\Wwwroot). Trong thư m?c OrderProc, t?o m?t t?p tin m?i có tên OrderEntry.asp v?i các t?p l?nh dư?i đây. K?ch b?n s? d?ng m?u truy c?p Northwind cơ s? d? li?u; b?n có th? c?n ph?i s?a đ?i các đư?ng d?n đ?n Northwind.mdb trong chu?i k?t n?i (sConn) đ? phù h?p v?i cài đ?t văn ph?ng c?a b?n.
<%@ 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
 
%> 
				
Đ? thành công x? l? m?t yêu c?u đ?t hàng, k?ch b?n ASP này hy v?ng s? d? li?u XML c?u trúc như sau:

<?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 này ch? đ?nh m?t đơn đ?t hàng cho khách hàng v?i ID c?a "bottm". Th? t? ch?a hai m?c: 11 đơn v? c?a s?n ph?m v?i ID c?a 4, và 2 đơn v? c?a s?n ph?m v?i ID c?a 18.

K?ch b?n ASP hi?n m?t s? l?i x? l? đ? đ?m b?o r?ng khách hàng đ? cung c?p nó v?i thông tin h?p l? đ?t hàng. Khách hàng ph?i cung c?p m?t ID khách hàng và ít nh?t m?t m?c; N?u các tiêu chí này không đư?c đáp ?ng, các k?ch b?n ASP không x? l? đơn đ?t hàng và tr? v? m?t l?i.

K?ch b?n ASP tr? v? d? li?u XML cho các khách hàng đ? th?c hi?n m?t yêu c?u đ?t hàng. XML này cho th?y s? thành công hay th?t b?i c?a t? ch? bi?n và c?ng cung c?p s? th? t? ngày thành công:

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

Bư?c 2: T?o giao di?n Workbook đ? đ?t hàng nh?p c?nh

  1. Trong Excel, b?t đ?u m?t b?ng tính m?i.
  2. Nh?p nh?n vào ô A1, A3, B3 và C3 như sau:
    A1:   Customer ID    B1:                C1:
    A2:                  B2:                C2:
    A3:   Product ID     B3:   Quantity     C3:   Price
    					
  3. Ch?n các t? bào A1:B1. Trên các Chèn tr?nh đơn, đi?m đ?n Tên và sau đó nh?p vào Tạo. Trong các T?o tên h?p tho?i, ch?n C?t bên trái và nh?p vào Ok. Đi?u này t?o ra tên đư?c xác đ?nh Customer_ID cho ô B1.
  4. Ch?n các t? bào A3:C8. Trên các Chèn tr?nh đơn, đi?m đ?n Tên và sau đó nh?p vào Tạo. Trong các T?o tên h?p tho?i, ch?n Đ?u hàng và nh?p vào Ok. Đi?u này t?o ra nh?ng cái tên đư?c xác đ?nh Product_ID, S? lư?ngGiá cho các t? bào A4:A8, B4:B8, và C4:C8.
  5. Nh?n ALT + F11 đ? b?t đ?u Visual Basic Editor.
  6. Trong Visual Basic Editor, trên các Chèn tr?nh đơn, nh?p vào Mô-đun. Thêm v? mô sau vào các mô-đun m?:
    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
    					
    LƯU ?: Thay đ?i YourWebServer trong sFolder không đ?i tên c?a máy ch? Web c?a b?n.

  7. Đóng các biên t?p viên Visual Basic và tr? v? Excel.
  8. Lưu b?ng tính trong thư m?c OrdrProc b?n trư?c đây t?o ra như Invoice1.xls.
M?u đơn đ?t hàng"" là v? cơ b?n các t? bào A1:C8. V? mô truy XMLSS cho m?u đơn đ?t hàng và t?i nó vào m?t m?i DOMDocument đ?i tư?ng. Nó sau đó t?i stylesheet Extensible Stylesheet ngôn ng? (XSL) vào nhau DOMDocument và bi?n đ?i XMLSS thành m?t c?u trúc XML ASP có th? gi?i thích như là m?t tr?t t? m?i. V? mô s? d?ng các XMLHTTP đ?i tư?ng đ? g?i l?nh XML k?ch b?n ASP trên máy ch? Web. ASP t?p l?nh x? l? đơn đ?t hàng và sau đó tr? v? b? XML v? mô cho thông tin t?nh tr?ng th? t?.

LƯU ?: Là m?t s? l?a ch?n thi?t k?, nhi?m v? chuy?n đ?i XMLSS đ? tùy ch?nh đơn đ?t hàng XML dành cho m? v? mô phía khách hàng. B?n c?ng có th? đăng bài XMLSS script ASP và đ? cho ASP th?c hi?n s? chuy?n đ?i cho b?n.

Bư?c 3: T?o Stylesheet

Trong thư m?c OrdrProc, t?o m?t t?p tin m?i có tên OrderEntry.xsl và dán m? XSL sau đây:
<?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>
				
XSL bi?n đ?i XMLSS đ? các tùy ch?nh đơn đ?t hàng XML (minh h?a trong bư?c 1) như sau:
  • XSL đ?t ID khách hàng b?i vư?t qua h? th?ng phân c?p nút cho đ?n khi nó g?p m?t nút <cell> có ch?a <namedcell> và các nút con <data> . Nó s? ki?m tra r?ng <namedcell> có m?t thu?c tính ss:Name tương đương v?i 'customer_id' và r?ng <data> có m?t thu?c tính ss:Type không b?ng nhau 'L?i'.<b00></b00></data></namedcell></data></namedcell></cell>
  • Đ? đ?nh v? kho?n m?c cho b?, XSL th?y t?t c? các <row> các nút v?i m?t <cell> nút có ch?a m?t <namedcell> tr? em nút v?i m?t thu?c tính ss:Name c?a 'product_id' và m?t <data> tr? em nút v?i m?t thu?c tính ss:Type không ph?i là 'L?i'.</data></namedcell></cell></row>
  • Đ?i v?i m?i <row> r?ng XSL s? xác đ?nh là m?t m?c cho tr?t t?, XSL s? d?ng m?u đ? phù h?p v?i <namedcell> các nút có m?t thu?c tính ss:Name 'product_id', 'S? lư?ng' và 'Giá'.</namedcell></row>

Bư?c 4: Ch?y m?u m? đ? x? l? m?t tr?t t? m?i

  1. Tr? v? Invoice1.xls trong Excel.
  2. Đ? mô ph?ng l?nh nh?p, C?p Nh?t Sheet1 v?i khách hàng và thông tin s?n ph?m như h?nh dư?i đây:
    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
    					
    LƯU ?: Cho m?u này, b?n ph?i nh?p vào h?p l? khách hàng và s?n ph?m ID cho k?ch b?n ASP đ? thành công x? l? đơn đ?t hàng.

  3. Trên các Công cụ tr?nh đơn, đi?m đ?n V? mô và nh?p vào Macro. Ch?n các ProcessOrder v? mô trong danh sách và b?m Ch?y.
  4. N?u đo?n m? ASP thành công x? l? đơn đ?t hàng, b?n nh?n đư?c m?t tin nh?n v?i s? th? t? m?i. B?t đ?u Microsoft Access và m? cơ s? d? li?u m?u Northwind. B?n s? th?y m?t m?c nh?p m?i trong b?ng đơn đ?t hàng v?i th? t? ID tr? l?i t? ASP. B?n c?ng th?y hai m?c m?i trong b?ng l?nh chi ti?t cho cùng m?t th? t? ID. Thoát kh?i truy c?p và tr? v? Invoice1.xls trong Excel.
  5. R? ràng các khách hàng ID trong ô B1 và ch?y v? mô m?t l?n n?a. Th?i gian này, máy ch? không th? x? l? đơn đ?t hàng và nó có tr? l?i m?t l?i ch? ra r?ng không có ID khách hàng đ? đư?c cung c?p.

T?i v?

ExcelXML.exe ch?a m?u đư?c mô t? trong bài vi?t này c?ng như m?t phiên b?n nâng cao c?a Invoice1.xls. Invoice2.xls s? d?ng cùng m?t k?ch b?n ASP và XSL stylesheet như Invoice1.xls. Tuy nhiên, Invoice2.xls ch?ng t? tính năng Excel b? sung, ch?ng h?n như b?o v? b?ng tính, xác nh?n d? li?u và công th?c VLOOKUP, mà b?n có th? s? d?ng đ? cung c?p m?t m?u đơn đ?t hàng nhi?u ngư?i dùng thân thi?n.

Các t?p tin sau đây có s?n đ? t?i v? t? Microsoft Download Center:
Excelxml.exe
Ngày phát hành: 3 tháng 4 năm 2001

Đ? có thêm thông tin v? làm th? nào đ? t?i các t?p tin h? tr? c?a Microsoft, b?m s? bài vi?t sau đ? xem bài vi?t trong cơ s? ki?n th?c Microsoft:
119591 Làm th? nào đ? có đư?c Microsoft h? tr? t?p tin t? các d?ch v? tr?c tuy?n
Microsoft đã quét vi-rút cho tệp này. Microsoft đã sử dụng phần mềm dò tìm vi-rút mới nhất hiện có vào ngày tệp được đăng. Các t?p tin đư?c lưu tr? trên tăng cư?ng b?o m?t máy ch? có th? giúp ph?ng ng?a b?t k? thay đ?i không đư?c phép đ? các t?p tin.

THAM KH?O

Đ? thêm thông tin v? cách s? d?ng XML và ASP đ? xây d?ng các gi?i pháp phía máy ch?, xem các trang Web m?ng nhà phát tri?n c?a Microsoft (MSDN) sau đây:
Gi?i thi?u v? XML
http://www.Microsoft.com/Learning/en/US/syllabi/2500AFinal.mspx

XML hư?ng d?n
http://MSDN.Microsoft.com/en-us/Library/ms950712.aspx

XSL Developer Guide
http://MSDN.Microsoft.com/en-us/Library/ms862738.aspx

G?i XML gi?a máy khách và máy ch?
http://MSDN.Microsoft.com/en-us/Library/ms763733.aspx

Đ? bi?t thêm chi ti?t, b?m vào nh?ng con s? bài vi?t dư?i đây đ? xem các bài vi?t trong cơ s? ki?n th?c Microsoft:
288215 Thông tin: Excel 2002 và XML
285891 Làm th? nào đ? s? d?ng Visual Basic ho?c ASP đ? t?o ra m?t b?ng tính XML cho Excel 2002
288130 Làm th? nào đ? s? d?ng ASP đ? xây d?ng b?ng tính XML cho hi?n th? phía khách hàng
(c) Microsoft Corporation 2001, t?t c? các quy?n. Nh?ng đóng góp c?a Lori B. Turner, Microsoft Corporation.

Thu?c tính

ID c?a bài: 278976 - L?n xem xét sau cùng: 23 Tháng Chín 2011 - Xem xét l?i: 3.0
Áp d?ng
  • Microsoft Visual Basic 6.0 Professional Edition
  • Microsoft Excel 2002 Standard Edition
T? khóa: 
kbdownload kbfile kbhowto kbmt KB278976 KbMtvi
Máy d?ch
QUAN TRỌNG: Bài vi?t này đư?c d?ch b?ng ph?n m?m d?ch máy c?a Microsoft ch? không ph?i do con ngư?i d?ch. Microsoft cung c?p các bài vi?t do con ngư?i d?ch và c? các bài vi?t do máy d?ch đ? b?n có th? truy c?p vào t?t c? các bài vi?t trong Cơ s? Ki?n th?c c?a chúng tôi b?ng ngôn ng? c?a b?n. Tuy nhiên, bài vi?t do máy d?ch không ph?i lúc nào c?ng hoàn h?o. Lo?i bài vi?t này có th? ch?a các sai sót v? t? v?ng, cú pháp ho?c ng? pháp, gi?ng như m?t ngư?i nư?c ngoài có th? m?c sai sót khi nói ngôn ng? c?a b?n. Microsoft không ch?u trách nhi?m v? b?t k? s? thi?u chính xác, sai sót ho?c thi?t h?i nào do vi?c d?ch sai n?i dung ho?c do ho?t đ?ng s? d?ng c?a khách hàng gây ra. Microsoft c?ng thư?ng xuyên c?p nh?t ph?n m?m d?ch máy này.
Nh?p chu?t vào đây đ? xem b?n ti?ng Anh c?a bài vi?t này:278976

Cung cấp Phản hồi

 

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