Как использовать XSL для преобразования таблицы Excel XML для использования на сервере

Переводы статьи Переводы статьи
Код статьи: 278976 - Vizualiza?i produsele pentru care se aplic? acest articol.
Развернуть все | Свернуть все

Аннотация

Excel 2002 представлены новые функциональные возможности XML, разработчики могут извлечь форматированные данные из листа в формате XML ЭЛЕКТРОННЫХ таблиц. В Значение свойства элемента Диапазон объект может возвращать содержимое и форматирование ячейки в XMLSS. XMLSS имеет формат XML, который может быть загружен Microsoft XML Parser для обработки во время выполнения. Потенциальные это средство применяется для учета XML-данных к серверному приложению для обработки. В этой статье показано, например, в котором книги Excel используется в качестве интерфейса для сценарий Active Server Pages (ASP), который обрабатывает XML-данные, извлеченные из диапазона в книге.

В данной статье описывается создание книги Excel сценария ASP и таблицы стилей, что работают совместно, как система обработки заказов. По всему действия получают объяснение каждого компонента и каким образом оно содействует для всего решения. Пример, описанных в этой статье также доступен для загрузки; инструкции по загрузке содержатся в разделе «Загрузка» в конце этой статьи.

Дополнительная информация

В этом примере несколько разных совместная работа компонентов как процессор заказа:
  • Сценария ASP. Серверный компонент является сценарий ASP, который принимает запросы клиентов для новых заказов. Сценарий предполагает, что запросы в определенном формате XML. Сценарий использует сведения из XML получает и добавляет новый заказ к образцу базы данных "Борей" с помощью объектов данных ActiveX (ADO).
  • Книги Excel. Клиентский компонент является книга Excel, которая содержит лист для ввода заказов и макроса, который взаимодействует со сценарием ASP обработать заказ нового пользователя.
  • Таблица стилей XSL. Таблица стилей преобразования XMLSS Excel в пользовательский формат XML, который требует сценария ASP. Макрос Microsoft Excel загружает таблицу стилей и трансформирует XMLSS в пользовательских XML-документ, до отправки данных для сценария ASP на веб-сервере.

Шаг 1: Создайте сценарий обработки заказа ASP

Создайте новую папку с именем OrderProc в виртуальную корневую папку веб-сервера (корневая папка по умолчанию является папка C:\Inetpub\Wwwroot). В папке OrderProc создайте новый файл с именем OrderEntry.asp с ниже сценарий. Сценарий используется образец базы данных Access «Борей»; необходимо изменить путь к Northwind.mdb в строке подключения (sConn) в соответствии с установки Microsoft 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 ожидает следующую структуру 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-документ определяет порядок для клиента с Идентификатором «bottm». Заказ содержит два элемента: 11 единиц продукта с Идентификатором 4 и 2 единиц продукта с кодом 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. На Вставка Выберите пункт Имя и выберите команду Создание. В Создать имена диалоговое окно, выберите Левый столбец и нажмите ОК. Это создает определенное имя Идентификатор_заказчика для ячейки B1.
  4. Выберите A3:C8 ячеек. На Вставка Выберите пункт Имя и выберите команду Создание. В Создать имена диалоговое окно, выберите Верхняя строка и нажмите ОК. Это создает определенные имена ИдентификаторПродукта, Кол-во и Цена для ячейки A4:A8, B4:B8 и C4:C8 соответственно.
  5. Клавиши ALT + F11, чтобы запустить редактор Visual Basic.
  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
    					
    ПРИМЕЧАНИЕ: Изменение YourWebServer в sFolder константу с именем веб-сервера.

  7. Закройте редактор Visual Basic и вернуться в Excel.
  8. Сохранение книги в папку OrdrProc, созданный ранее как Invoice1.xls.
«Форма заказа» является по существу A1:C8 ячеек. Макрос получает XMLSS формы заказа и загружает их в новый DOMDocument объект. Затем загружает таблицу стилей расширяемого языка стилей (XSL) в другую DOMDocument и преобразования XMLSS в структуру XML, который ASP можно интерпретировать как новый заказ. Используется макрос XMLHTTP Объект учета заказа XML для сценария ASP на веб-сервере. Сценарий ASP обрабатывает заказ и возвращает несколько XML макрос для сведений о состоянии заказа.

ПРИМЕЧАНИЕ: Как вариант дизайна задача преобразования XMLSS к пользовательской XML заказа присваивается код макроса на стороне клиента. Можно также учесть XMLSS сценарий ASP и позволяют выполнять преобразования 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>
				
XSL-преобразования XMLSS для пользовательского порядка XML (как показано в шаге 1) следующим образом:
  • XSL находит код заказчика, обход иерархии узлов, пока не встретится <cell> узел, который содержит <namedcell> и <data> дочерних узлов. Он проверяет, что <namedcell> имеет атрибут ss:Name, равное "Идентификатор_заказчика" и, <data> имеет атрибут ss:Type, который не равно "Ошибка".<b00></b00></data></namedcell></data></namedcell></cell>
  • Для поиска товаров по заказу XSL находит все <row> узлы с <cell> узел, который содержит <namedcell> дочернему узлу, имеющему атрибут "ИдентификаторПродукта" ss:Name и <data> дочернего узла с атрибутом ss:Type, который не является "Ошибка".</data></namedcell></cell></row>
  • Для каждого <row> XSL определяет, является товаром, для заказа на XSL использует шаблоны в соответствии с <namedcell> узлы, имеющие атрибут ss:Name "ИдентификаторПродукта", "Количество" и "Цена".</namedcell></row>

Шаг 4: Запустите образец кода для обработки нового заказа

  1. Вернуться к Invoice1.xls в Excel.
  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
    					
    ПРИМЕЧАНИЕ: Для этого образца необходимо ввести допустимое и клиентов идентификаторы для сценария ASP для обработки заказа.

  3. На Сервис Выберите пункт Макрос и нажмите Макросы. Выберите ProcessOrder макрос в списке и нажмите кнопку Запустить.
  4. Если сценарий ASP успешно обрабатывает заказ, появится сообщение с новым номером заказа. Запустите Microsoft Access и откройте базу данных «Борей». Вы должны увидеть новую запись в таблице «Заказы» с кодом заказа, возвращаемые из ASP. Появится два новых записей в таблицу сведения О заказе для того же идентификатора заказа. Закрыть доступ и вернуться к Invoice1.xls в Excel.
  5. Очистить код заказчика в ячейке B1 и запустите макрос снова. Это время сервер не может обработать заказ и возвращает сообщение предоставил отсутствует идентификатор клиента.

Загрузить

ExcelXML.exe содержит примеры, описанные в этой статье, а также улучшенную версию Invoice1.xls. Invoice2.xls использует в качестве Invoice1.xls того же сценария ASP и таблицы стилей XSL. Тем не менее Invoice2.xls демонстрируются дополнительные возможности Microsoft Excel, такие как защита листа, проверку данных и ВПР формулы, которые можно использовать для обеспечения более удобным для пользователей формы заказа.

Следующий файл доступен для загрузки из центра загрузки Майкрософт:
Excelxml.exe
Дата выпуска: 3 апреля 2001 г.

Для получения дополнительных сведений о том, как загрузить файлы поддержки Майкрософт щелкните следующий номер статьи базы знаний Майкрософт:
119591 Как загрузить файлы поддержки Майкрософт из Интернета
Корпорация Майкрософт проверила этот файл на наличие вирусов. Корпорация Майкрософт использует последние версии антивирусного программного обеспечения на дату публикации файла. Файл хранится на защищенных серверах, что предотвращает его несанкционированное изменение.

Ссылки

Для получения дополнительных сведений об использовании XML и ASP для построения серверных решений просмотра веб-узлов Microsoft Developer Network (MSDN):
Введение в 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

Для получения дополнительных сведений щелкните следующий номер статьи базы знаний Майкрософт:
288215 ИНФОРМАЦИЯ: Excel 2002 и XML-
285891 Использование Visual Basic или ASP для создания электронной таблицы XML для Excel 2002
288130 Как использовать технологию ASP для построения электронной таблицы XML для отображения на стороне клиента
(c) Корпорация Майкрософт, 2001, все права защищены. Взносы, Лори б. Тернер, корпорация Майкрософт.

Свойства

Код статьи: 278976 - Последний отзыв: 23 сентября 2011 г. - Revision: 5.0
Информация в данной статье относится к следующим продуктам.
  • Microsoft Visual Basic 6.0 Professional Edition
  • Microsoft Excel 2002 Standard Edition
Ключевые слова: 
kbdownload kbfile kbhowto kbmt KB278976 KbMtru
Переведено с помощью машинного перевода
ВНИМАНИЕ! Перевод данной статьи был выполнен не человеком, а с помощью программы машинного перевода, разработанной корпорацией Майкрософт. Корпорация Майкрософт предлагает вам статьи, переведенные как людьми, так и средствами машинного перевода, чтобы у вас была возможность ознакомиться со статьями базы знаний KB на родном языке. Однако машинный перевод не всегда идеален. Он может содержать смысловые, синтаксические и грамматические ошибки, подобно тому как иностранец делает ошибки, пытаясь говорить на вашем языке. Корпорация Майкрософт не несет ответственности за неточности, ошибки и возможный ущерб, причиненный в результате неправильного перевода или его использования. Корпорация Майкрософт также часто обновляет средства машинного перевода.
Эта статья на английском языке: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