วิธีการใช้ XSL เพื่อแปลงกระดาษคำนวณ XML Excel สำหรับใช้เอ็นต์เซิร์ฟเวอร์

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

สรุป

Excel 2002 แนะนำฟังก์ชัน XML ใหม่ที่ช่วยให้นักพัฒนาเพื่อดึงข้อมูลที่จัดรูปแบบจากแผ่นงานในรูปแบบกระดาษคำนวณ XML (XMLSS) กระบวนการค่าคุณสมบัติของคำช่วงวัตถุสามารถส่งคืนการจัดรูปแบบเซลล์และเนื้อหาใน XMLSS XMLSS คือ well-formed XML ที่โหลด โดยตัวแยกวิเคราะห์ XML Microsoft สำหรับ manipulation ขณะใช้งานจริง หนึ่งอาจใช้ลักษณะการทำงานนี้ถูกลงรายการบัญชีข้อมูล XML ไปยังเซิร์ฟเวอร์แอพลิเคชันสำหรับการประมวลผล บทความนี้แสดงให้เห็นถึงแนวทางที่หนึ่งเช่นอย่าง ที่สมุดงาน Excel จะใช้เป็นอินเทอร์เฟซสำหรับสคริปต์การ Active Server หน้า (ASP) ที่ประมวลผลข้อมูล XML ที่แยกจากช่วงในสมุดงาน

บทความนี้แนะนำคุณผ่านการสร้างสมุดงาน Excel สคริปต์การ ASP และสไตล์ชีที่ทำให้ทั้งหมดงานร่วมกันเป็นใบสั่งการประมวลผลระบบ ตลอดขั้นตอน คำอธิบายของแต่ละคอมโพเนนต์และการจัดสรรวิธีดังกล่าวสำหรับการแก้ไขปัญหาทั้งหมดถูกกำหนดไว้ ตัวอย่างที่อธิบายไว้ในบทความนี้จะพร้อมใช้งาน สำหรับการดึงข้อมูล สำหรับคำแนะนำในการดาวน์โหลดยัง ดูส่วน "การดาวน์โหลด" ในตอนท้ายของบทความนี้

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

ในตัวอย่างนี้ คอมโพเนนต์ที่แตกต่างกันหลายงานร่วมกันทำงานเป็นการประมวลผลใบสั่ง:
  • สคริปต์ asp. คอมโพเนนต์ฝั่งเซิร์ฟเวอร์เป็นสคริปต์การ ASP ที่จะร้องขอของไคลเอ็นต์สำหรับใบสั่งใหม่ สคริปต์ expects ร้องขออยู่ในรูปแบบ XML ที่ระบุ สคริปต์ใช้ข้อมูลจาก XML ที่ได้รับ และเพิ่มใบสั่งใหม่ไปยังฐานข้อมูลตัวอย่าง Northwind โดยใช้วัตถุข้อมูล ActiveX (ADO)
  • สมุดงาน Excel. คอมโพเนนต์ฝั่งไคลเอ็นต์เป็นสมุดงาน Excel ที่ประกอบด้วยแผ่นงานสำหรับรายการบัญชีใบสั่งและแมโครที่ interacts กับสคริปต์ ASP จะดำเนินการใบสั่งใหม่ที่ของผู้ใช้
  • สไตล์ชี xsl. สไตล์ชีการแปลง XMLSS Excel ไปยังรูปแบบ XML แบบกำหนดเองที่ต้องใช้สคริปต์ ASP แมโคร Excel โหลดสไตล์ชี และแปลง XMLSS กับ XML แบบกำหนดเองก่อนที่จะลงรายการบัญชีข้อมูลกับสคริปต์ ASP บนเว็บเซิร์ฟเวอร์

ขั้นตอนที่ 1: สร้างสคริปต์การประมวลผลใบสั่ง ASP

สร้างโฟลเดอร์ใหม่ที่ชื่อว่า OrderProc ในโฟลเดอร์รากเสมือนของเว็บเซิร์ฟเวอร์ของคุณ (โฟลเดอร์รากของเริ่มต้นคือ C:\Inetpub\Wwwroot) ในโฟลเดอร์ OrderProc สร้างแฟ้มใหม่ที่ชื่อว่า OrderEntry.asp กับสคริปต์ด้านล่าง สคริปต์ใช้ฐานข้อมูลการเข้าถึง Northwind ตัวอย่าง คุณอาจต้องปรับเปลี่ยนเส้นทางไปยัง Northwind.mdb ในสายอักขระเชื่อมต่อ (sConn) ให้ตรงกับการติดตั้ง Office ของคุณ
<%@ 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
 
%> 
				
การประมวลผลการร้องขอใบสั่งเรียบร้อยแล้ว สคริปต์นี้ ASP expects ข้อมูล XML ที่จัดโครงสร้างต่อไปนี้:

<?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 นี้ designates ใบสั่งสำหรับลูกค้าที่มี ID ของ "BOTTM" ใบสั่งประกอบด้วยรายการที่สอง: 11 หน่วยของผลิตภัณฑ์ ด้วย ID ของ 4 และหน่วยของผลิตภัณฑ์ 2 ด้วย ID ของ 18

สคริปต์ ASP มีการจัดการข้อผิดพลาดบางอย่างเพื่อให้แน่ใจว่า ไคลเอนต์ได้ให้มัน ด้วยรายละเอียดของใบสั่งที่ถูกต้อง ไคลเอ็นต์ต้องให้กับรหัสลูกค้าและรายการอย่างน้อยหนึ่งรายการขึ้น ถ้าเงื่อนไขเหล่านี้จะไม่ตรงตาม สคริปต์ ASP ไม่ดำเนินการใบสั่ง และส่งกลับข้อผิดพลาด

สคริปต์ ASP ส่งกลับข้อมูล XML ไปยังไคลเอนต์ที่ได้ทำการร้องขอใบสั่ง XML นี้บ่งชี้ความสำเร็จหรือล้มเหลวของการประมวลผลใบสั่ง และจะ แสดงหมายเลขใบสั่งบนความสำเร็จ:

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

ขั้นตอนที่ 2: สร้างอินเทอร์เฟซสำหรับสมุดงานสำหรับรายการบัญชีใบสั่ง

  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 ในการแทรกเมนู ให้ชี้ไปที่ชื่อ:แล้ว คลิกสร้าง. ในการสร้างชื่อกล่องโต้ตอบ เลือกคอลัมน์ด้านซ้ายคลิกตกลง. ซึ่งสร้างชื่อที่กำหนดCustomer_IDสำหรับเซลล์ B1
  4. เลือกเซลล์ A3:C8 ในการแทรกเมนู ให้ชี้ไปที่ชื่อ:แล้ว คลิกสร้าง. ในการสร้างชื่อกล่องโต้ตอบ เลือกแถวที่ด้านบนคลิกตกลง. ซึ่งสร้างชื่อที่กำหนดProduct_ID,ปริมาณและราคาสำหรับเซลล์ A4:A8, B4:B8 และ C4:C8 ตามลำดับ
  5. กด ALT+F11 เพื่อเริ่ม Visual Basic Editor
  6. ในการ Visual Basic Editor ในการแทรกเมนู คลิกโมดูล. เพิ่มแมโครดังต่อไปนี้ในโมดูลรหัส:
    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
    					
    หมายเหตุ:: เปลี่ยนแปลงYourWebServerในค่าคง sFolder ชื่อของเว็บเซิร์ฟเวอร์ของคุณ

  7. ปิดตัวแก้ไข Visual Basic และกลับไปยัง Excel
  8. บันทึกสมุดงานในโฟลเดอร์ OrdrProc ที่คุณสร้างไว้ก่อนหน้านี้เป็น Invoice1.xls
"ใบสั่งแบบ" คือ essentially A1:C8 เซลล์ แมโครดึง XMLSS สำหรับแบบฟอร์มใบสั่ง และโหลดเข้าใหม่DOMDocumentวัตถุ จะโหลดสไตล์ชีภาษาสไตล์ชี Extensible (XSL) ไปยังอีกแล้วDOMDocumentและแปลง XMLSS ลงในโครงสร้าง XML ที่ ASP สามารถแปลเป็นใบสั่งใหม่ ใช้แมโครการxmlhttpวัตถุที่มีการลงรายการบัญชีใบสั่ง XML กับสคริปต์ ASP บนเว็บเซิร์ฟเวอร์ สคริปต์ ASP ประมวลผลใบสั่ง และจากนั้น ส่งกลับค่า XML เพิ่มเติมกับแมโครข้อมูลสถานะของใบสั่ง

หมายเหตุ:: เป็นตัวเลือกการออกแบบ งานของ transforming XMLSS กับ XML ใบสั่งที่กำหนดเองถูกกำหนดรหัสแมโครฝั่งไคลเอ็นต์ You can also post the XMLSS to the ASP script and let ASP perform the transformation for you.

Step 3: Create the Stylesheet

In the OrdrProc folder, create a new file named OrderEntry.xsl and paste the following XSL code:
<?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>
				
The XSL transforms the XMLSS to the custom Order XML (illustrated in Step 1) as follows:
  • The XSL locates the Customer ID by traversing the node hierarchy until it encounters a <cell> node that contains the <namedcell> and <data> child nodes. It checks that <namedcell> has an ss:Name attribute equal to 'Customer_ID' and that <data> has an ss:Type attribute that does not equal 'Error'. </data></namedcell></data></namedcell></cell>
  • To locate items for the order, the XSL finds all <row> nodes with a <cell> node that contain a <namedcell> child node with an ss:Name attribute of 'Product_ID' and a <data> child node with an ss:Type attribute that is not 'Error'.</data></namedcell></cell></row>
  • For each <row> that the XSL determines is an item for the order, the XSL uses templates to match <namedcell> nodes that have an ss:Name attribute of 'Product_ID', 'Quantity' and 'Price'.</namedcell></row>

Step 4: Run the Sample Code to Process a New Order

  1. Return to Invoice1.xls in Excel.
  2. To simulate order entry, update Sheet1 with customer and product information as shown below:
    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 this sample, you must enter valid customer and product IDs for the ASP script to successfully process the order.

  3. ในการเครื่องมือเมนู ให้ชี้ไปที่แมโครคลิกมาโคร. เลือกการProcessOrdermacro in the list and clickเรียกใช้.
  4. If the ASP script successfully processes the order, you receive a message with the new order number. Start Microsoft Access and open the Northwind sample database. You should see a new entry in the Orders table with the Order ID returned from the ASP. You also see two new entries in the Order Details table for the same Order ID. Quit Access and return to Invoice1.xls in Excel.
  5. Clear the Customer ID in cell B1 and run the macro again. This time, the server is unable to process the order and it returns an error indicating that no Customer ID has been provided.

ดาวน์โหลด

ExcelXML.exe contains the sample described in this article as well as an enhanced version of Invoice1.xls. Invoice2.xls uses the same ASP script and XSL stylesheet as Invoice1.xls. However, Invoice2.xls demonstrates additional Excel features, such as worksheet protection, data validation and VLOOKUP formulas, that you can use to provide a more user-friendly order form.

แฟ้มต่อไปนี้สามารถดาวน์โหลดได้จากศูนย์ดาวน์โหลดของ Microsoft::
Excelxml.exe
Release Date: April 3, 2001

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

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

For additional information on using XML and ASP to build server-side solutions, see the following Microsoft Developer Network (MSDN) Web sites:
Introduction to XML
http://www.microsoft.com/learning/en/us/syllabi/2500AFinal.mspx

XML Tutorial
http://msdn.microsoft.com/en-us/library/ms950712.aspx

XSL Developer's Guide
http://msdn.microsoft.com/en-us/library/ms862738.aspx

Sending XML Between the Client and Server
http://msdn.microsoft.com/en-us/library/ms763733.aspx

สำหรับข้อมูลเพิ่มเติม ให้คลิกหมายเลขบทความด้านล่างนี้ เพื่อดูบทความใน Microsoft Knowledge Base::
288215ข้อมูล: Excel 2002 และ XML
285891วิธีการใช้ Visual Basic หรือ ASP เมื่อต้องการสร้างเป็นกระดาษคำนวณ XML สำหรับ Excel 2002
288130วิธีการใช้ ASP เพื่อสร้างกระดาษคำนวณ XML สำหรับการแสดงผลเอ็นต์ไคลเอนต์
(c) Microsoft Corporation 2001 สิทธิ์ทั้งหมดที่สำรองไว้ contributions โดย Lori B. Turner, Microsoft Corporation

คุณสมบัติ

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

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

 

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