Comment faire pour utiliser XSL pour transformer la feuille de calcul XML Excel pour une utilisation côté serveur

IMPORTANT : Cet article est issu du système de traduction automatique mis au point par Microsoft (http://support.microsoft.com/gp/mtdetails). Un certain nombre d’articles obtenus par traduction automatique sont en effet mis à votre disposition en complément des articles traduits en langue française par des traducteurs professionnels. Cela vous permet d’avoir accès, dans votre propre langue, à l’ensemble des articles de la base de connaissances rédigés originellement en langue anglaise. Les articles traduits automatiquement ne sont pas toujours parfaits et peuvent comporter des erreurs de vocabulaire, de syntaxe ou de grammaire (probablement semblables aux erreurs que ferait une personne étrangère s’exprimant dans votre langue !). Néanmoins, mis à part ces imperfections, ces articles devraient suffire à vous orienter et à vous aider à résoudre votre problème. Microsoft s’efforce aussi continuellement de faire évoluer son système de traduction automatique.

La version anglaise de cet article est la suivante: 278976
Cet article a été archivé. Il est proposé « en l'état » et ne sera plus mis à jour.
Résumé
Excel 2002 introduit une nouvelle fonctionnalité XML qui permet aux développeurs d'extraire des données mises en forme de feuilles de calcul dans un format XML Spreadsheet (XMLSS). La propriété Value d'un objet Range peut retourner mise en forme de cellule et le contenu au format XMLSS. Feuille de calcul XML est bien formé XML qui peut être chargé par l'analyseur syntaxique XML pour la manipulation au moment de l'exécution. Une utilisation potentielle de cette fonction consiste à valider les données XML à une application serveur pour traitement. Cet article illustre un exemple, dans lequel un classeur Excel est utilisé comme une interface pour un script ASP (Active Server Pages) qui traite les données XML extraites à partir d'une plage dans un classeur.

Cet article vous guide tout au long de la création d'un classeur Excel, un script ASP et une feuille de style que tous les fonctionnent ensemble sous la forme d'un système de traitement des commandes. Tout au long des étapes, explications de chaque composant et il contribue à la solution entière sont corrects. L'exemple décrit dans cet article est également disponible pour téléchargement ; pour les instructions de téléchargement, consultez la section "Téléchargement" à la fin de cet article.
Plus d'informations
Dans cet exemple, différents composants fonctionnent ensemble pour fonctionner comme un processeur de commande :
  • Script ASP. Le composant côté serveur est un script ASP qui accepte les requêtes des clients pour les nouvelles commandes. Le script attend des demandes vers un format XML spécifique. Le script prend les informations à partir du code XML qu'il reçoit et ajoute une nouvelle commande à la base de données exemple Les Comptoirs à l'aide de ActiveX Data Objects (ADO).
  • Classeur Excel. Le composant côté client est un classeur Excel contenant une feuille de calcul pour la saisie de commande et une macro qui interagit avec le script ASP pour traiter le nouvel ordre de l'utilisateur.
  • Feuille de style XSL. Une feuille de style transforme la feuille de calcul XML Excel au format XML personnalisé qui requiert le script ASP. La macro Excel charge la feuille de style et transforme la feuille de calcul XML à la partie XML personnalisée antérieures à la publication des données au script ASP sur le serveur Web.

Étape 1: Création du script de traitement des commandes ASP

Créez un nouveau dossier nommé OrderProc dans le dossier racine virtuel de votre serveur Web (le dossier racine par défaut est C:\inetpub\wwwroot). Dans le dossier OrderProc, créez un nouveau fichier nommé OrderEntry.asp avec le script ci-dessous. Le script utilise l'exemple de base de données Northwind Access ; il est possible que vous deviez modifier le chemin d'accès à Northwind.mdb dans la chaîne de connexion (sConn) en fonction de votre installation 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 %> 				
Pour traiter correctement une requête d'ordre, ce script ASP attend des données XML structurées comme suit :

<?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>					
Ce XML désigne une commande pour le client avec l'ID du «BOTTM». L'ordre contient deux éléments : 11 unités du produit avec l'ID du 4 et 2 unités du produit avec l'ID du 18.

Le script ASP effectue une gestion d'erreur pour vous assurer que clients ont le fournies avec informations de commande valide. Les clients doivent fournir un code de client et au moins un élément ; si ces critères ne sont pas remplies, le script ASP ne traite pas l'ordre et renvoie une erreur.

Le script ASP renvoie des données XML aux clients qui ont apportées à une requête d'ordre. Ce XML indique la réussite ou l'échec du traitement de commande et fournit également le numéro de commande en cas de réussite :

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

Étape 2: Créer l'interface de classeur pour traitement des commandes

  1. Dans Excel, démarrez un nouveau classeur.
  2. Saisissez les libellés comme suit dans les cellules A1, A3, B3 et C3 :
    A1:   Customer ID    B1:                C1:A2:                  B2:                C2:A3:   Product ID     B3:   Quantity     C3:   Price					
  3. Sélectionnez les cellules a1: B1. Dans le menu Insertion, pointez sur nom, puis cliquez sur créer. Dans la boîte de dialogue Créer des noms, sélectionnez Colonne de gauche, cliquez sur OK. Cela crée le nom défini Customer_ID pour la cellule B1.
  4. Sélectionnez les cellules A3:C8. Dans le menu Insertion, pointez sur nom, puis cliquez sur créer. Dans la boîte de dialogue Créer des noms, sélectionnez la Ligne du haut, cliquez sur OK. Cela crée les noms définis Product_ID, quantité et prix pour les cellules A4:A8, B4:B8 et C4:C8 respectivement.
  5. Appuyez sur ALT + F11 pour démarrer l'éditeur Visual Basic.
  6. Dans Visual Basic Editor, dans le menu Insertion, cliquez sur module. Ajouter la macro suivante dans le module de code :
    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 IfEnd Sub					
    Remarque : modifier Votre_serveur_web dans la constante sFolder sur le nom de votre serveur Web.

  7. Fermez l'éditeur Visual Basic et retourner dans Excel.
  8. Enregistrez le classeur dans le dossier OrdrProc créé précédemment comme Invoice1.xls.
Le "bon de commande» est essentiellement cellules A1:C8. La macro extrait la feuille de calcul XML pour le bon de commande et charge dans un nouvel objet DOMDocument. Il charge la feuille de style XSL (Extensible Stylesheet Language) dans un autre DOMDocument et transforme la feuille de calcul XML en une structure XML que l'ASP peut interpréter comme une nouvelle commande. La macro utilise l'objet XMLHTTP pour valider la commande XML au script ASP sur le serveur Web. Le script ASP traite cette commande, puis renvoie XML plus à la macro pour des informations sur le statut des commandes.

Remarque : sous un choix de conception, la tâche de transformation de la feuille de calcul XML vers XML ordre personnalisé bénéficie pour le code côté client. Vous pouvez également valider la feuille de calcul XML au script ASP et laisser ASP exécute la transformation pour vous.

Étape 3: Créer la feuille de style

Dans le dossier OrdrProc, créez un nouveau fichier nommé OrderEntry.xsl et collez le code XSL suivant :
<?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>				
le langage XSL transforme la feuille de calcul XML à la commande XML personnalisée (illustrée à l'étape 1) comme suit :
  • Le XSL localise le code client en parcourant la hiérarchie de nœud jusqu'à ce qu'elle rencontre un nœud <cell>qui contient le <namedcell>et nœuds enfants de <data>. Il vérifie que <namedcell>ss:Name attribut a la valeur pour 'Customer_ID' et que <data>possède un attribut ss:Type qui n'est égale à «Erreur».
  • Pour rechercher des éléments de la commande, celle-ci recherche tous les nœuds <row>avec un nœud <cell>qui contiennent un nœud enfant <namedcell>à un attribut ss:Name 'Product_ID' et un nœud enfant <data>avec un attribut ss:Type qui n'est pas «Erreur».
  • Pour chaque <row>que le code XSL détermine est un élément de la commande, le XSL utilise des modèles pour correspondent aux nœuds <namedcell>possédant un attribut ss:Name de «Product_ID», «Quantité» et «Prix».

Étape 4: Exécution de l'exemple de code de traitement d'une nouvelle commande

  1. Revenir à Invoice1.xls dans Excel.
  2. Pour simuler la saisie de commandes, mettre à jour la feuille Sheet1 avec informations sur les clients et produit comme indiqué ci-dessous :
    A1:   Customer ID    B1:   BOTTM        C1:A2:                  B2:                C2:A3:   Product ID     B3:   Quantity     C3:   PriceA4:   4              B4:   11           C4:   20.25A5:   18             B5:   2            C5:   63.70					
    Remarque : pour cet exemple, vous devez entrer des ID client et le produit valides pour le script ASP à traiter avec succès la commande.

  3. Dans le menu Outils, pointez sur macro, cliquez sur macros. Sélectionnez la macro ProcessOrder dans la liste et cliquez sur exécuter.
  4. Si le script ASP traite correctement la commande, vous recevez un message avec le nouveau numéro de commande. Démarrez Microsoft Access et ouvrez la base de données exemple Les Comptoirs. Vous devez voir une nouvelle entrée dans la table commandes le code de commande retourné à partir de l'ASP. Vous voyez également deux entrées nouvelles dans la table Détails commandes pour le code de commande même. Quitter Access et revenir à Invoice1.xls dans Excel.
  5. Désactivez le code client dans la cellule B1 et réexécutez la macro. Cette fois, le serveur ne peut pas traiter l'ordre et il retourne une erreur indiquant qu'aucun code client n'a été fournie.

Télécharger

ExcelXML.exe contient l'exemple décrit dans cet article, ainsi que d'une version améliorée de Invoice1.xls. Invoice2.xls utilise le même script ASP et de la feuille de style XSL comme Invoice1.xls. Toutefois, Invoice2.xls illustre des fonctionnalités d'Excel supplémentaires, telles que la protection de la feuille de calcul, validation des données et les formules RECHERCHEV, que vous pouvez utiliser pour fournir un formulaire de commande plus convivial.

Le fichier suivant est disponible au téléchargement à partir du centre de téléchargement Microsoft :
Date de publication: 3 avril 2001.

Pour plus d'informations sur la façon de télécharger des fichiers de support technique Microsoft, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la base de connaissances Microsoft :
119591Procédure pour obtenir des fichiers de support technique Microsoft auprès des services en ligne
Microsoft a analysé ce fichier pour les virus. Microsoft utilisé les logiciels de détection de virus les plus récentes ne sont associé à la date à laquelle le fichier a été validé. Le fichier est stocké sur des serveurs sécurisés, empêchant toute modification non autorisée du fichier.
Références
Pour plus d'informations sur l'utilisation de XML et ASP pour créer des solutions côté serveur, consultez les sites de Web MSDN (Microsoft Developer Network) suivant : Pour plus d'informations, cliquez sur les numéros ci-dessous pour afficher les articles correspondants dans la base de connaissances Microsoft :
288215INFO : Excel 2002 et XML
285891Comment faire pour utiliser Visual Basic ou ASP pour créer une feuille de calcul XML pour Excel 2002
288130Comment faire pour utiliser ASP pour créer des feuilles de calcul XML à afficher côté client
(c) Microsoft Corporation 2001, tous droits réservés. Contribution de Lori b. Turner, Microsoft Corporation.

ExcelXML

Avertissement : Cet article a été traduit automatiquement.

Propriétés

ID d'article : 278976 - Dernière mise à jour : 12/05/2015 22:39:53 - Révision : 4.8

Microsoft Visual Basic 6.0 Édition professionnelle, Microsoft Excel 2002

  • kbnosurvey kbarchive kbmt kbdownload kbdownload kbfile kbhowto KB278976 KbMtfr
Commentaires