Verwendung von XSL auf Excel XML-Kalkulationstabelle für die serverseitige Verwendung transformieren

SPRACHE AUSWÄHLEN SPRACHE AUSWÄHLEN
Artikel-ID: 278976 - Produkte anzeigen, auf die sich dieser Artikel bezieht
Alles erweitern | Alles schließen

Zusammenfassung

Excel 2002 führt neue XML-Funktionalität, die Entwicklern ermöglicht, formatierte Daten aus Arbeitsblättern in einem XML-Kalkulationstabellenformat (XMLSS) Format zu extrahieren. Die Value -Eigenschaft ein Range -Objekt kann Zellformatierung und Inhalt in XMLSS zurückgeben. XMLSS ist wohlgeformtes XML, die von Microsoft XML Parser für die Bearbeitung zur Laufzeit geladen werden kann. Eine mögliche Verwendung dieser Funktion besteht, zu XML-Daten einer Serveranwendung für die Verarbeitung zu buchen. Dieser Artikel beschreibt ein Beispiel, in dem Excel-Arbeitsmappe als eine Schnittstelle für ein Skript (Active Server Pages) verwendet wird, die XML-Daten verarbeitet, die aus einem Bereich in einer Arbeitsmappe extrahiert wird.

Dieser Artikel führt Sie durch die Erstellung von einer Excel-Arbeitsmappe, ein ASP-Skript und ein Stylesheet, dass alle als ein System zur Auftragsverarbeitung zusammenarbeiten. In den Schritten werden Erklärungen der einzelnen Komponenten und wie die gesamte Lösung beiträgt angegeben. Das Beispiel in diesem Artikel beschriebenen ist auch verfügbar, für den Download; für Downloadanweisungen, finden Sie im Abschnitt "Download" am Ende dieses Artikels.

Weitere Informationen

In diesem Beispiel arbeiten mehrere verschiedene Komponenten zusammen, um als einen Prozessor Reihenfolge:
  • ASP-Skript . Die serverseitige Komponente ist ein ASP-Skripts, die Clientanforderungen für neue Aufträge verwendet. Das Skript erwartet Anforderungen in einem bestimmten XML-Format. Das Skript verwendet Informationen aus dem XML, dass er empfängt und fügt einen neuen Auftrag der Beispieldatenbank "Nordwind" mithilfe von ActiveX Data Objects (ADO) hinzu.
  • Excel-Arbeitsmappe . Die clientseitige Komponente ist eine Excel-Arbeitsmappe ein Arbeitsblatt für Auftragserfassung enthält und ein Makro, das mit ASP-Skript zum Verarbeiten der neuen Bestellung des Benutzers interagiert.
  • XSL-Stylesheet . Ein Stylesheet transformiert die XMLSS Excel in das benutzerdefinierte XML-Format, das ASP-Skript erfordert. Das Excel-Makro lädt das Stylesheet und transformiert XMLSS auf den benutzerdefinierten XML-Code vor, buchen die Daten in das ASP-Skript auf dem Server.

Schritt 1: Erstellen des Skripts ASP Order Processing

Erstellen Sie einen neuen Ordner namens OrderProc im virtuellen Stammordner des Webservers (der Standard-Stammordner ist C:\Inetpub\Wwwroot). Erstellen Sie im Ordner OrderProc eine neue Datei mit dem Namen OrderEntry.asp und das folgende Skript ein. Das Skript verwendet die Beispieldatenbank Nordwind-Access; möglicherweise müssen Sie den Pfad zu "Nordwind.mdb" in der Verbindungszeichenfolge (sConn) entsprechend Ihrer Office-Installation ändern.
<%@ 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
 
%> 
				
zum erfolgreich verarbeiten einer Auftrag-Anforderung erwartet diese ASP-Skript XML-Daten wie folgt strukturiert:

<?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>
					
Dieses XML kennzeichnet einen Auftrag für den Debitor mit der ID "BOTTM". Der Auftrag enthält zwei Elemente: 11 Einheiten des Produkts mit der ID von 4 und 2 Einheiten des Produkts, mit der ID 18.

Das ASP-Skript führt eine Fehlerbehandlung, um sicherzustellen, dass Clients mit gültigen Bestellinformationen darauf haben. Clients müssen einer Kunden-Nr und mindestens ein Element angeben; Wenn diese Kriterien nicht erfüllt werden, das ASP-Skript nicht die Reihenfolge verarbeitet, und gibt einen Fehler zurück.

Das ASP-Skript gibt XML-Daten an Clients, die eine Reihenfolge Anforderung vorgenommenen zurück. Dieses XML gibt den Erfolg oder Fehler bei der Auftragsabwicklung und bietet außerdem die Nummer des Auftrags bei Erfolg:

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

Schritt 2: Erstellen der Arbeitsmappe-Schnittstelle für die Bestellabwicklung

  1. Starten Sie eine neue Arbeitsmappe in Excel.
  2. Geben Sie Beschriftungen in den Zellen A1, A3, B3 und C3 wie folgt:
    A1:   Customer ID    B1:                C1:
    A2:                  B2:                C2:
    A3:   Product ID     B3:   Quantity     C3:   Price
    					
  3. Wählen Sie die Zellen a1: B1. Zeigen Sie im Menü Einfügen auf Name und klicken Sie dann auf Erstellen . Wählen Sie im Dialogfeld Namen erstellen Linke Spalte , und klicken Sie auf OK . Dadurch wird der definierte Name Customer_id für Zelle B1 erstellt.
  4. Wählen Sie Zellen A3:C8. Zeigen Sie im Menü Einfügen auf Name und klicken Sie dann auf Erstellen . Wählen Sie im Dialogfeld Namen erstellen die Erste Zeile , und klicken Sie auf OK . Dadurch wird die definierten Namen Product_ID , Menge und Preis für Zellen A4:A8, B4:B8 und C4:C8 bzw. erstellt.
  5. Drücken Sie die Tastenkombination [ALT]+[F11], um den Visual Basic-Editor zu starten.
  6. Klicken Sie im Visual Basic-Editor im Menü Einfügen auf Modul . Das folgende Makro zu im Code-Modul hinzufügen:
    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
    					
    Hinweis : ändern IhrWebServer in der sFolder-Konstante auf den Namen des Webservers.

  7. Schließen Sie Visual Basic-Editor, und Excel wieder.
  8. Speichern Sie die Arbeitsmappe in den Ordner OrdrProc, den Sie zuvor als Invoice1.xls erstellt.
Das "Bestellung-Formular" ist im Wesentlichen Zellen A1:C8. Das Makro XMLSS für das Auftragsformular abgerufen und in ein neues DOMDocument -Objekt geladen. Dann lädt das Stylesheet XSL (Extensible Stylesheet Language) in einer anderen DOMDocument und transformiert die XMLSS in eine XML-Struktur, die die ASP als eine neue Bestellung interpretieren können. Das Makro verwendet das XMLHTTP -Objekt, um die Reihenfolge XML das ASP-Skript auf dem Server zu buchen. Das ASP-Skript verarbeitet die Reihenfolge und gibt dann an das Makro für Bestelldaten Status weitere XML zurück.

Hinweis : als eine Auswahl Entwurf wird die Aufgabe des XMLSS mit benutzerdefinierten Order XML transformieren der clientseitigen Makrocode erhält. Sie können auch buchen XMLSS des ASP-Skripts und ASP die Transformation für Sie ausführen lassen.

Schritt 3: Erstellen der Stylesheet

Im Ordner OrdrProc eine neue Datei mit dem Namen OrderEntry.xsl erstellen, und fügen Sie den folgenden 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>
				
der XSL-Transformationen XMLSS auf benutzerdefinierte Reihenfolge XML (in Schritt 1 dargestellt) wie folgt:
  • Die XSL-Datei sucht Kunden-ID durch die Knotenhierarchie durchlaufen, bis es, auftritt ein <cell>-Knoten mit der <namedcell> und <data> untergeordneten Knoten. Es überprüft, ob <namedcell> Ss:Name ein Attribut gleich 'Customer_ID' hat und die <data> verfügt über ein Ss:Type-Attribut, die nicht 'Error' entspricht.
  • Um Elemente für den Auftrag zu suchen, findet die XSL-Datei alle <row>-Knoten mit einem <cell>-Knoten, die enthalten einen <namedcell> untergeordneten Knoten mit dem Ss:Name-Attribut 'Product_ID' und einen <data> untergeordneten Knoten mit einem Ss:Type-Attribut, das nicht "Fehler" ist.
  • Für jedes <row>, das XSL bestimmt ist ein Element die XSL-Datei verwendet, Vorlagen für den Auftrag um <namedcell> Knoten vergleichen, die ein Ss:Name-Attribut "Product_ID", "Menge" und "Preis" haben.

Schritt 4: Ausführen des Beispielcodes in eine neue Bestellung zu verarbeiten

  1. Zurück zur Invoice1.xls in Excel.
  2. Um Auftragserfassung zu simulieren, aktualisieren Sheet1 mit Kunden und Produktinformationen wie unten dargestellt:
    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
    					
    Hinweis : für dieses Beispiel müssen Sie gültige Kunde und Produkt IDs für das ASP-Skript erfolgreich die Reihenfolge verarbeitet.

  3. Zeigen Sie im Menü Extras auf Makro und klicken Sie auf Makros . Wählen Sie das ProcessOrder -Makro in der Liste, und klicken Sie auf Ausführen .
  4. Wenn das ASP-Skript erfolgreich die Reihenfolge verarbeitet, Meldung Sie eine mit der neuen Bestellnummer. Starten Sie Microsoft Access und öffnen Sie die Beispieldatenbank. Mit der Order-ID aus dem ASP-Code zurückgegeben sollte ein neues Eintrags in der Tabelle Bestellungen angezeigt werden. Finden Sie auch zwei neue Einträge in der Tabelle Bestelldetails für der gleichen Reihenfolge-ID Beenden Sie Access und zur Invoice1.xls in Excel zurückzukehren.
  5. Deaktivieren Sie die Kunden-ID in Zelle B1, und führen Sie das Makro erneut aus. Dieses Mal der Server ist nicht die Reihenfolge verarbeiten und wird eine Fehlermeldung, dass keine KUNDENNUMMER bereitgestellt wurde.

Downloaden

ExcelXML.exe enthält das Beispiel in diesem Artikel sowie eine verbesserte Version des Invoice1.xls beschrieben. Invoice2.xls werden die gleichen ASP-Skript und XSL-Stylesheet als Invoice1.xls verwendet. Invoice2.xls veranschaulicht jedoch zusätzliche Excel-Features, wie z. B. Arbeitsblattschutz, Gültigkeitsprüfung und SVERWEIS Formeln, die Sie verwenden können, um eine benutzerfreundlichere Bestellformular bereitzustellen.

Die folgende Datei steht im Microsoft Download Center zum Download zur Verfügung:
Excelxml.exe
Freigabedatum: April 3, 2001

Weitere Informationen zum Download von Microsoft Support-Dateien finden Sie in folgendem Artikel der Microsoft Knowledge Base:
119591So erhalten Sie Dateien vom Microsoft Support im Internet
Microsoft hat diese Datei auf Viren überprüft. Microsoft hat dazu die neueste Software zur Virenerkennung verwendet, die zum Zeitpunkt der Bereitstellung verfügbar war. Die Datei befindet sich auf Servern mit verstärkter Sicherheit, wodurch nicht autorisierte Änderungen an der Datei weitestgehend verhindert werden.

Informationsquellen

Weitere Informationen zur serverseitigen Lösungen anhand von XML und ASP finden Sie in den folgenden Websites von Microsoft Developer Network (MSDN):
Einführung in XML
http://www.microsoft.com/learning/en/us/syllabi/2500AFinal.mspx

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

XSL-Entwicklerleitfaden
http://msdn.microsoft.com/en-us/library/ms862738.aspx

Senden von XML zwischen dem Client und Server
http://msdn.microsoft.com/en-us/library/ms763733.aspx

Weitere Informationen finden Sie folgenden Artikel der Microsoft Knowledge Base:
288215INFO: Excel 2002 und XML
285891Verwendung von Visual Basic oder ASP zum Erstellen einer XML-Kalkulationstabelle für Excel 2002
288130Verwendung von ASP zum Kalkulationstabellen-XML für clientseitigen Anzeige erstellen
(c) Microsoft Corporation 2001, Alle Rechte vorbehalten. Beiträge von Lori B. Turner, Microsoft Corporation.

Eigenschaften

Artikel-ID: 278976 - Geändert am: Montag, 29. Januar 2007 - Version: 4.8
Die Informationen in diesem Artikel beziehen sich auf:
  • Microsoft Visual Basic 6.0 Professional Edition
  • Microsoft Excel 2002 Standard Edition
Keywords: 
kbmt kbdownload kbdownload kbfile kbhowto KB278976 KbMtde
Maschinell übersetzter Artikel
Wichtig: Dieser Artikel wurde maschinell und nicht von einem Menschen übersetzt. Die Microsoft Knowledge Base ist sehr umfangreich und ihre Inhalte werden ständig ergänzt beziehungsweise überarbeitet. Um Ihnen dennoch alle Inhalte auf Deutsch anbieten zu können, werden viele Artikel nicht von Menschen, sondern von Übersetzungsprogrammen übersetzt, die kontinuierlich optimiert werden. Doch noch sind maschinell übersetzte Texte in der Regel nicht perfekt, insbesondere hinsichtlich Grammatik und des Einsatzes von Fremdwörtern sowie Fachbegriffen. Microsoft übernimmt keine Gewähr für die sprachliche Qualität oder die technische Richtigkeit der Übersetzungen und ist nicht für Probleme haftbar, die direkt oder indirekt durch Übersetzungsfehler oder die Verwendung der übersetzten Inhalte durch Kunden entstehen könnten.
Den englischen Originalartikel können Sie über folgenden Link abrufen: 278976
Microsoft stellt Ihnen die in der Knowledge Base angebotenen Artikel und Informationen als Service-Leistung zur Verfügung. Microsoft übernimmt keinerlei Gewährleistung dafür, dass die angebotenen Artikel und Informationen auch in Ihrer Einsatzumgebung die erwünschten Ergebnisse erzielen. Die Entscheidung darüber, ob und in welcher Form Sie die angebotenen Artikel und Informationen nutzen, liegt daher allein bei Ihnen. Mit Ausnahme der gesetzlichen Haftung für Vorsatz ist jede Haftung von Microsoft im Zusammenhang mit Ihrer Nutzung dieser Artikel oder Informationen ausgeschlossen.

Ihr Feedback an uns

 

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