Jak używać XSL do przekształcania arkusza kalkulacyjnego XML programu Excel do użycia po stronie serwera

Tłumaczenia artykułów Tłumaczenia artykułów
Numer ID artykułu: 278976 - Zobacz jakich produktów dotyczą zawarte w tym artykule porady.
Rozwiń wszystko | Zwiń wszystko

Streszczenie

Program Excel 2002 wprowadzono nowe funkcje XML, który umożliwia deweloperom wyodrębnić sformatowane dane z arkuszy w formacie arkusza kalkulacyjnego XML (XMLSS). W Wartość Właściwość Zakres obiekt może przywrócić formatowanie komórek i zawartość XMLSS. XMLSS jest poprawnie sformułowany dokument XML, który może być ładowany przez analizator składni XML firmy Microsoft do manipulacji w czasie wykonywania. Jeden potencjalnego wykorzystania tej funkcji jest księgowanie danych XML do aplikacji serwera do przetworzenia. W tym artykule przedstawiono jednym z takich przykładów, w którym skoroszytu programu Excel jest używany jako interfejs skryptów Active Server Pages (ASP), która przetwarza dane XML, które ekstrahuje się z zakresu w skoroszycie.

W tym artykule prowadzi przez tworzenie skoroszytu programu Excel, skrypt ASP i arkusza stylów, które współpracują ze sobą, jak system przetwarzania zamówienia. Całej czynności są podane objaśnienia każdego składnika i w jaki sposób przyczynia się do całego rozwiązania. Próbki opisane w tym artykule jest również dostępna do pobrania; Aby uzyskać instrukcje pobierania zobacz sekcję "Pobieranie" na końcu tego artykułu.

Więcej informacji

W tym przykładzie kilka różnych składników pracują razem jako osoba przetwarzająca zamówienie:
  • Skrypt ASP. Składnik serwerowy jest skrypt ASP, który przyjmuje żądania klienckie dotyczące nowych zamówień. Skrypt oczekuje żądań w określonym formacie XML. Skrypt pobiera informacje z pliku XML odbieranych i dodaje nowe zamówienie w bazie danych Northwind przy użyciu obiektów ActiveX Data Objects (ADO).
  • Skoroszyt programu Excel. Składnik klienta jest skoroszyt programu Excel zawierającego arkusz do wprowadzania zamówień i makra, który współdziała ze skryptu ASP przez użytkownika nowego zamówienia.
  • Arkusz stylów XSL. Arkusz stylów przekształca XMLSS programu Excel do niestandardowego formatu XML, który wymaga skryptu ASP. Makro programu Excel ładuje arkusza stylów i przekształca XMLSS do niestandardowego kodu XML przed do ogłaszania danych do skryptu ASP na serwerze sieci Web.

Krok 1: Tworzenie skryptu ASP kolejność przetwarzania

Utwórz nowy folder o nazwie OrderProc w folderze wirtualnym katalogu głównym serwera sieci Web (domyślny folder główny to C:\Inetpub\Wwwroot). W folderze OrderProc Utwórz nowy plik o nazwie OrderEntry.asp z poniższego skryptu. Skrypt używa przykładowej bazy danych Northwind programu Access; należy zmienić ścieżkę do Northwind.mdb w ciągu połączenia (sConn), aby dopasować instalacji pakietu 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
 
%> 
				
Pomyślnie przetworzyć żądania zamówienia, ten skrypt ASP oczekuje, że dane XML następującą postać:

<?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>
					
Ten XML wyznacza zamówienia dla klienta o identyfikatorze "bottm". Kolejność zawiera dwa elementy: 11 jednostek produktu z Identyfikatorem 4 i 2 jednostki produktu z Identyfikatorem 18.

Skrypt ASP wykonuje niektóre obsługi błędów, aby zapewnić, że klienci dostarczyć go z prawidłową kolejność informacji. Klientów należy podać identyfikator klienta i co najmniej jednego elementu; Jeśli te kryteria nie są spełnione, skrypt ASP nie przetwarza zamówienia i zwraca błąd.

Skrypt ASP zwraca dane XML do klientów, które złożyły wniosek zamówienia. XML to określa sukces lub niepowodzenie przetwarzania zamówień i zapewnia także numer zamówienia w przypadku powodzenia:

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

Krok 2: Tworzenie interfejsu skoroszytu na zapis zlecenia

  1. W programie Excel należy uruchomić nowy skoroszyt.
  2. Wprowadź etykiety w komórkach A1, A3, B3 i C3 w następujący sposób:
    A1:   Customer ID    B1:                C1:
    A2:                  B2:                C2:
    A3:   Product ID     B3:   Quantity     C3:   Price
    					
  3. Zaznacz komórki A1:B1. Na Wstaw menu, wskaż Nazwa a następnie kliknij przycisk Tworzenie. W Tworzenie nazw Wybierz pozycję Lewa kolumna a następnie kliknij przycisk OK. Spowoduje to utworzenie zdefiniowanej nazwy Customer_ID w komórce B1.
  4. Zaznacz komórki A3:C8. Na Wstaw menu, wskaż Nazwa a następnie kliknij przycisk Tworzenie. W Tworzenie nazw Wybierz pozycję Górny wiersz a następnie kliknij przycisk OK. Spowoduje to utworzenie nazwy zdefiniowane Product_ID, Ilość i Cena dla komórek odpowiednio A4:A8, B4:B8 i C4:C8.
  5. Naciśnij klawisze ALT + F11, aby uruchomić Edytor Visual Basic.
  6. W Edytorze Visual Basic na Wstaw menu, kliknij przycisk Moduł. Dodaj następujące makro do modułu kodu:
    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
    					
    UWAGA: Zmiana TwójSerwerSieciWeb w stałej sFolder do nazwy serwera sieci Web.

  7. Zamknij Edytor Visual Basic i powrócić do programu Excel.
  8. Zapisz skoroszyt w folderze OrdrProc poprzednio utworzone jako Invoice1.xls.
"Formularz zamówienia" jest zasadniczo A1:C8 komórek. Makro pobiera XMLSS formularza zamówienia i ładuje go do nowego DOMDocument obiekt. Następnie ładuje stylesheet Extensible Stylesheet Language (XSL) do innego DOMDocument i transformacje XMLSS do struktury XML, który ASP można interpretować jako nowego zamówienia. Używa makra XMLHTTP obiekt, aby zaksięgować zamówienie XML do skryptu ASP na serwerze sieci Web. Skrypt ASP przetwarza zamówienia, a następnie zwraca więcej XML do makra informacje o stanie zamówienia.

UWAGA: Jako wybór projektu zadanie Przekształcanie XMLSS niestandardowej kolejności XML otrzymuje kod makra po stronie klienta. Można także zaksięgować XMLSS do skryptu ASP i program ASP wykonuje przekształcenia.

Krok 3: Tworzenie arkusza stylów

W folderze OrdrProc Utwórz nowy plik o nazwie OrderEntry.xsl i wklej następujący kod 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 przekształca XMLSS do niestandardowej kolejności XML (zilustrowane w kroku 1) w następujący sposób:
  • Przechodzenie przez węzeł hierarchii, aż do napotkania węzła <cell> , który zawiera <namedcell> i <data> węzły podrzędne XSL lokalizuje identyfikator klienta. Sprawdza, że <namedcell> ma atrybut ss:Name jest równe "customer_id" oraz że <data> ma atrybut ss:Type, który nie jest równa "Error".<b00></b00></data></namedcell></data></namedcell></cell>
  • Aby zlokalizować towarów z zamówienia, XSL znajduje wszystkie <row> węzły z <cell> węzeł, który zawiera <namedcell> węzeł podrzędny z atrybutem ss:Name 'product_id' i <data> węzeł podrzędny z atrybutem ss:Type, który nie jest "Error".</data></namedcell></cell></row>
  • Dla każdego <row> że określa XSL jest element zamówienia, XSL używa szablonów w celu dopasowania <namedcell> węzłów, które mają atrybut ss:Name, "product_id", "Ilość" i "Cena".</namedcell></row>

Krok 4: Uruchamiać kod przykładowy nowe zamówienia

  1. Powrót do Invoice1.xls w programie Excel.
  2. Aby zasymulować zapis zlecenia, aktualizacja Arkusz1 z klienta i informacje o produkcie, jak pokazano poniżej:
    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
    					
    UWAGA: W tym przykładzie należy wprowadzić prawidłową klienta i identyfikatory skryptu ASP produktu pomyślnie przetwarza zamówienia.

  3. Na Narzędzia menu, wskaż Makro a następnie kliknij przycisk Makra. Wybierz ProcessOrder makro na liście i kliknij Uruchom.
  4. Jeśli skrypt ASP pomyślnie przetwarza zamówienia, zostanie wyświetlony komunikat z nowego numeru zamówienia. Uruchom program Microsoft Access i otwórz przykładową bazę danych Northwind. Nowy wpis w tabeli Zamówienia powinny być widoczne z identyfikator zamówienia zwrócony z ASP. Zobaczysz także dwa nowe wpisy w tabeli Szczegóły zamówień ten sam identyfikator zamówienia. Zamknij program Access i powrót do Invoice1.xls w programie Excel.
  5. Wyczyść identyfikator klienta w komórce B1 i ponownie uruchomić makro. Czas, serwer nie jest w stanie przetwarzać zamówienia i zwraca błąd wskazujący dostarczono żadnego Identyfikatora klienta.

Pobierz

ExcelXML.exe zawiera przykładowe opisane w tym artykule, jak również rozbudowana wersja Invoice1.xls. Invoice2.xls ten sam skrypt ASP i arkusza stylów XSL są używane jako Invoice1.xls. Jednak Invoice2.xls przedstawiono dodatkowe funkcje programu Excel, takich jak ochrona arkusza, sprawdzanie poprawności danych i wyszukaj.PIONOWO formuł, których można użyć, aby zapewnić bardziej przyjaznych dla użytkownika formularza zamówienia.

Następujący plik jest dostępny do pobrania z witryny Microsoft — Centrum pobierania:
Excelxml.exe
Data wydania:, 3 kwietnia 2001 r.

Aby uzyskać dodatkowe informacje dotyczące sposobu pobierania plików pomocy technicznej firmy Microsoft kliknij następujący numer artykułu w celu wyświetlenia tego artykułu z bazy wiedzy Microsoft Knowledge Base:
119591 Jak uzyskać pliki pomocy technicznej firmy Microsoft w usługach Online
Firma Microsoft przeskanowała plik w poszukiwaniu wirusów. Microsoft używane najbardziej aktualne oprogramowania wykrywania wirusa, który był dostępny w dniu zaksięgowania pliku. Plik jest przechowywany na serwerach o podwyższonych zabezpieczeniach, które uniemożliwiają nieautoryzowane zmiany w pliku.

Materiały referencyjne

Aby uzyskać dodatkowe informacje o korzystaniu z XML i ASP tworzenie rozwiązań po stronie serwera zobacz następujące witryny firmy Microsoft Developer Network (MSDN) w sieci Web:
Wprowadzenie do XML
http://www.microsoft.com/learning/en/us/syllabi/2500AFinal.mspx

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

Podręcznik dewelopera XSL
http://msdn.microsoft.com/en-us/library/ms862738.aspx

Wysyłanie XML między klientem a serwerem
http://msdn.microsoft.com/en-us/library/ms763733.aspx

Aby uzyskać dodatkowe informacje kliknij numery artykułów poniżej w celu wyświetlenia tych artykułów z bazy wiedzy Microsoft Knowledge Base:
288215 INFORMACJE: Program Excel 2002 i XML
285891 Jak utworzyć arkusz kalkulacyjny XML w programie Excel 2002 za pomocą programu Visual Basic lub ASP
288130 Sposób użycia stron ASP do utworzenia arkusza kalkulacyjnego XML do wyświetlania po stronie klienta
(c) Microsoft Corporation 2001, wszelkie prawa zastrzeżone. Składki Maria B. Turner, Microsoft Corporation.

Właściwości

Numer ID artykułu: 278976 - Ostatnia weryfikacja: 23 września 2011 - Weryfikacja: 3.0
Informacje zawarte w tym artykule dotyczą:
  • Microsoft Visual Basic 6.0 Professional Edition
  • Microsoft Excel 2002 Standard Edition
Słowa kluczowe: 
kbdownload kbfile kbhowto kbmt KB278976 KbMtpl
Przetłumaczone maszynowo
WAŻNE: Ten artykuł nie został przetłumaczony przez człowieka, tylko przez oprogramowanie do tłumaczenia maszynowego firmy Microsoft. Firma Microsoft oferuje zarówno artykuły tłumaczone przez ludzi, jak i artykuły tłumaczone maszynowo, dzięki czemu każdy użytkownik może uzyskać dostęp do całej zawartości bazy wiedzy Knowledge Base we własnym języku. Prosimy jednak pamiętać, że artykuły przetłumaczone maszynowo nie zawsze są doskonałe. Mogą zawierać błędy słownictwa, składni i gramatyki, przypominające błędy robione przez osoby, dla których język użytkownika nie jest językiem ojczystym. Firma Microsoft nie odpowiada za wszelkie nieścisłości, błędy lub szkody spowodowane nieprawidłowym tłumaczeniem zawartości oraz za wykorzystanie tej zawartości przez klientów. Oprogramowanie do tłumaczenia maszynowego jest często aktualizowane przez firmę Microsoft.
Anglojęzyczna wersja tego artykułu to:278976

Przekaż opinię

 

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