Excel XML-werkblad transformeren voor gebruik met Server-Side XSL gebruiken

Vertaalde artikelen Vertaalde artikelen
Artikel ID: 278976 - Bekijk de producten waarop dit artikel van toepassing is.
Alles uitklappen | Alles samenvouwen

Samenvatting

Excel 2002 introduceert nieuwe XML-functionaliteit waarmee ontwikkelaars opgemaakte gegevens extraheren uit werk bladen in een indeling XML-werkblad (XMLSS). HetWaardeeigenschap van eenBereikobject kunt cel opmaak en inhoud in XMLSS retourneren. XMLSS is juist opgemaakt XML-bestand dat kan worden geladen door de Microsoft XML-Parser voor manipulatie tijdens runtime. Een mogelijke gebruik van deze functie is te boeken naar een servertoepassing voor het verwerken van XML-gegevens. In dit artikel ziet u een voorbeeld, waarbij een Excel-werkmap als een interface wordt gebruikt voor een script met ASP (Active Server Pages) waarmee XML-gegevens die is geëxtraheerd uit een bereik in een werkmap worden verwerkt.

Dit artikel helpt u bij het maken van een Excel-werkmap, een ASP-script en een stylesheet die samenwerken als een administratie systeem. Gedurende de stappen uitleg van elk onderdeel en hoe het bijdraagt tot de hele oplossing gegeven. Het voorbeeld in dit artikel beschreven is ook beschikbaar voor download. Zie de sectie "Download" aan het einde van dit artikel voor instructies voor het downloaden.

Meer informatie

In dit voorbeeld samenwerken diverse verschillende onderdelen om te functioneren als een order processor:
  • ASP-Script. De server-side component is een ASP-script dat client aanvragen voor nieuwe orders. Het script verwacht dat aanvragen voor een specifieke XML-indeling. Het script wordt informatie uit het XML-bestand dat ontvangt en een nieuwe order aan de voorbeeld data base Noorden wind toegevoegd met behulp van ActiveX Data Objects (ADO).
  • Excel-werkmap. De component op de client is een Excel-werkmap met een werk blad voor order invoer en een macro die samenwerkt met het ASP-script van de gebruiker nieuwe order verwerken.
  • XSL-opmaakmodel. Een stylesheet transformeert de XMLSS Excel de aangepaste XML-indeling die het ASP-script is vereist. De Excel-macro het opmaak model wordt geladen en transformeert de XMLSS aan aangepaste XML voorafgaand aan het boeken van de gegevens naar het ASP-script op de webserver.

Stap 1: De volg orde van ASP-verwerking Script maken

Maak een nieuwe map met de naam OrderProc in de virtuele hoofdmap van uw webserver (de standaard hoofdmap is c:\Inetpub\Wwwroot.). Maak een nieuw bestand met de naam OrderEntry.asp met het onderstaande script in de map OrderProc. Het script maakt gebruik van de voorbeeld data base Noorden wind toegang; mogelijk moet u het pad naar Noordenwind. mdb in de verbindingsreeks (sConn) zodat deze overeenkomt met uw Office-installatie te wijzigen.
<%@ 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
 
%> 
				
Een bestelling verwerken, deze ASP-script verwacht dat XML-gegevens als volgt gestructureerd:

<?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>
					
Deze XML wordt een order voor de klant met de ID "bottm". De order bevat twee items: 11 eenheden van het product met de ID 4 en 2 eenheden van het product met de ID van 18.

Het ASP-script bevat enkele fout afhandeling om ervoor te zorgen dat clients hebben deze geldig bestel informatie verstrekt. Clients moeten bieden een klant-ID en ten minste één item. Als niet aan deze criteria wordt voldaan, wordt het ASP-script niet de volg orde verwerkt en resulteert in een fout.

Het ASP-script worden XML-gegevens retourneert aan clients die een aanvraag voor de order hebt gemaakt. Deze XML geeft het slagen of mislukken van de order verwerking en biedt ook het ordernummer op succes:

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

Stap 2: Maak de werkmap Interface voor Order invoer

  1. Maak een nieuwe werkmap in Excel.
  2. Voer labels in cellen A1, A3, B3 en C3:
    A1:   Customer ID    B1:                C1:
    A2:                  B2:                C2:
    A3:   Product ID     B3:   Quantity     C3:   Price
    					
  3. Selecteer de cellen a1: B1. Op deInvoegenhet menuNaamen klik vervolgens opMaken. In deNamen makenhet dialoog venster selecterenLinkerkolomen klik opOK. Hiermee maakt u de gedefinieerde naamCustomer_IDvoor cel B1.
  4. Selecteer cellen A3:C8. Op deInvoegenhet menuNaamen klik vervolgens opMaken. In deNamen makenhet dialoog venster selecterenBovenste rijen klik opOK. Hiermee maakt u de gedefinieerde namenProduct_ID,HoeveelheidenPrijsvoor A4:A8, B4:B8 en C4:C8 respectievelijk cellen.
  5. Druk op ALT + F11 om de Visual Basic Editor gestart.
  6. In de Visual Basic-Editor op deInvoegenmenu, klikt u opModule. De volgende macro toevoegen aan de codemodule:
    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
    					
    OPMERKING: WijzigenUwWebserverin de sFolder constante met de naam van uw webserver.

  7. Sluit de Visual Basic Editor en keer terug naar Excel.
  8. De werkmap opslaan in de OrdrProc map die u eerder hebt gemaakt als Invoice1.xls.
"Bestel formulier" is in feite cellen A1:C8. De macro haalt de XMLSS voor het formulier order en laadt deze in een nieuweDOM documentobject. Vervolgens geladen de stylesheet XSL (Extensible Stylesheet Language) in een anderDOM documenten transformaties de XMLSS in een XML-structuur die de ASP-pagina kan worden geïnterpreteerd als een nieuwe order. De macro wordt deXMLHTTPobject met het boeken van de order XML naar het ASP-script op de webserver. Het ASP-script verwerkt de order en vervolgens meer XML geretourneerd aan de macro voor informatie over de volg orde.

OPMERKING: Als de optie ontwerp krijgt de taak van de XMLSS aangepaste volg orde XML transformeren naar de client-side code. U kunt ook de XMLSS naar het ASP-script boeken en laat ASP de transformatie voor u uitvoeren.

Stap 3: Maak de Stylesheet

Maak een nieuw bestand met de naam OrderEntry.xsl in de map OrdrProc en plak het volgende 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>
				
De XSL transformaties de XMLSS aan de aangepaste volg orde XML (geïllustreerde in stap 1) als volgt:
  • De klant-ID zoekt de XSL door de hiërarchie van knoop punten doorlopen tot aan een <cell>knoop punt met de <namedcell>en <data>onderliggende knoop punten. Controleert dat <namedcell>heeft een ss:Name ken merk gelijk is aan "customer_id" en dat <data>heeft een ss:Type ken merk is niet gelijk aan "Vergissing".</data></namedcell></data></namedcell></cell>
  • Om te zoeken items voor de order, de XSL zoekt alle <row>knoop punten met een <cell>knoop punt met een <namedcell>onderliggend knoop punt met een ken merk ss:Name van 'product_id' en een <data>onderliggend knoop punt met een ss:Type ken merk dat niet "Vergissing".</data></namedcell></cell></row>
  • Voor elke <row>is een item dat wordt bepaald door de XSL voor de order, gebruikt de XSL sjablonen aan <namedcell>knoop punten met een ken merk ss:Name van "product_id", "Aantal" en "Prijs".</namedcell></row>

Stap 4: Uitvoeren van de voorbeeldcode om een nieuwe Order te verwerken

  1. Terug naar Invoice1.xls in Excel.
  2. Order invoer simuleren, update voor Sheet1 met klant- en product gegevens zoals hieronder:
    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
    					
    OPMERKING: Voor dit voorbeeld moet u geldige klant- en product-id's voor het ASP-script de order verwerken.

  3. Op deHulp programma'shet menuMacroen klik opMacro's. Selecteer deProcessOrdermacro in de lijst en klik opUitvoeren.
  4. Als het ASP-script de volg orde verwerkt, er een bericht verschijnt met de nieuwe volg ordernummer. Start Microsoft Access en open de voorbeeld data base Noorden wind. Met de Order-ID geretourneerd van de ASP-code ziet u een nieuwe vermelding in de tabel Orders. Ook ziet u twee nieuwe posten in de tabel Order Details voor de dezelfde Order-id. Access afsluiten en terug naar Invoice1.xls in Excel.
  5. Schakel de klant-ID in cel B1 en de macro opnieuw uitvoeren. Deze tijd is de server kan de order niet verwerken en retourneert een fout die aangeeft dat geen klantnummer heeft verstrekt.

Downloaden

ExcelXML.exe bevat het voorbeeld dat wordt beschreven in dit artikel, alsmede een verbeterde versie van Invoice1.xls. Invoice2.xls gebruikt dezelfde ASP-script en XSL-opmaakmodel als Invoice1.xls. Invoice2.xls toont echter extra Excel-functies, zoals de werk blad beveiliging, gegevensvalidatie en VERT. formules, die u gebruiken kunt om een meer gebruikersvriendelijke manier bestel formulier.

Het volgende bestand wordt gedownload vanaf het Microsoft Download Center:
Excelxml.exe
Release datum: 3 April 2001

Voor meer informatie over het downloaden van Microsoft-ondersteuningsbestanden, klikt u op het volgende artikelnummer in de Microsoft Knowledge Base:
119591Hoe Microsoft-ondersteuningsbestanden via Online Services downloaden
Microsoft heeft dit bestand op virussen. Microsoft gebruikt de meest actuele software voor virusdetectie die beschikbaar was op de datum waarop het bestand werd gepost. Het bestand is opgeslagen op beveiligde servers die onbevoegde wijzigingen aan het bestand verhinderen.

Referenties

Zie de volgende websites van Microsoft Developer Network (MSDN) voor meer informatie over XML en ASP gebruiken om server-side oplossingen te bouwen:
Inleiding tot XML
http://www.Microsoft.com/learning/en/us/syllabi/2500AFinal.mspx

XML-zelfstudie
http://msdn.Microsoft.com/en-us/library/ms950712.aspx

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

XML tussen Client en Server verzenden
http://msdn.Microsoft.com/en-us/library/ms763733.aspx

Voor meer informatie klikt u op de volgende artikel nummers in de Microsoft Knowledge Base:
288215INFO: Excel 2002 en XML
285891Het gebruik van Visual Basic- of ASP-pagina maken voor Excel 2002 XML-werkblad
288130Het gebruik van ASP XML Spreadsheet maken voor Client-Side weer geven
(c) Microsoft Corporation 2001, alle rechten voorbehouden. Bijdragen: Lori b. Turner, Microsoft Corporation.

Eigenschappen

Artikel ID: 278976 - Laatste beoordeling: vrijdag 23 september 2011 - Wijziging: 3.0
De informatie in dit artikel is van toepassing op:
  • Microsoft Visual Basic 6.0 Professional Edition
  • Microsoft Excel 2002 Standard Edition
Trefwoorden: 
kbdownload kbfile kbhowto kbmt KB278976 KbMtnl
Automatisch vertaald artikel
BELANGRIJK: Dit artikel is vertaald door de vertaalmachine software van Microsoft in plaats van door een professionele vertaler. Microsoft biedt u professioneel vertaalde artikelen en artikelen vertaald door de vertaalmachine, zodat u toegang heeft tot al onze knowledge base artikelen in uw eigen taal. Artikelen vertaald door de vertaalmachine zijn niet altijd perfect vertaald. Deze artikelen kunnen fouten bevatten in de vocabulaire, zinsopbouw en grammatica en kunnen lijken op hoe een anderstalige de taal spreekt en schrijft. Microsoft is niet verantwoordelijk voor onnauwkeurigheden, fouten en schade ontstaan door een incorrecte vertaling van de content of het gebruik ervan door onze klanten. Microsoft past continue de kwaliteit van de vertaalmachine software aan door deze te updaten.
De Engelstalige versie van dit artikel is de volgende:278976

Geef ons feedback

 

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