Utilizzo di XSL trasforma il foglio di calcolo di Excel XML per l'utilizzo del server

Traduzione articoli Traduzione articoli
Identificativo articolo: 278976 - Visualizza i prodotti a cui si riferisce l?articolo.
Espandi tutto | Chiudi tutto

Sommario

Excel 2002 viene introdotta una nuova funzionalitÓ di XML che consente agli sviluppatori di estrarre i dati formattati da fogli di lavoro in un formato di foglio di calcolo XML (XMLSS). La proprietÓ di valore di un oggetto Range pu˛ restituire la formattazione della cella e il contenuto di fiducia in formato XMLSS. XMLSS Ŕ ben formato XML che pu˛ essere caricata da Microsoft XML Parser per la modifica in fase di esecuzione. Un potenziale utilizzo di questa funzionalitÓ consiste nel registrare dati XML da un'applicazione server per l'elaborazione. Questo articolo viene illustrato un esempio, in cui una cartella di lavoro di Excel viene utilizzata come interfaccia per uno script ASP (Active Server Pages) che elabora i dati XML che viene estratto da un intervallo in una cartella di lavoro.

In questo articolo consente la creazione di una cartella di lavoro di Excel, uno script ASP e un foglio di stile che tutti funzionano insieme come un ordine di sistema di elaborazione. Durante la procedura, vengono fornite spiegazioni di ciascun componente e il modo in cui contribuisce l'intera soluzione. L'esempio descritto in questo articolo Ŕ inoltre disponibile per il download; per le istruzioni di download, vedere la sezione "Download" alla fine di questo articolo.

Informazioni

In questo esempio, diversi diversi componenti interagiscono per funzionare come un processore di ordine:
  • script ASP . Il componente di lato server Ŕ uno script ASP che accetta le richieste dei client per i nuovi ordini. Lo script prevede che le richieste di essere in un formato XML specifico. Lo script accetta le informazioni XML che esso riceve e si aggiunge un nuovo ordine del database di esempio Northwind utilizzando ActiveX Data Objects (ADO).
  • cartella di lavoro di Excel . Il componente lato client Ŕ una cartella di lavoro Excel contenente un foglio di lavoro per l'ordine di immissione e di una macro che interagisce con lo script ASP per elaborare il nuovo ordine dell'utente.
  • foglio di stile XSL . Un foglio di stile trasforma il formato XMLSS Excel al formato XML personalizzato che richiede lo script ASP. La macro di Excel carica il foglio di stile e lo trasforma il formato XMLSS al codice XML personalizzato prima alla registrazione di dati per lo script ASP sul server Web.

Passaggio 1: Creare lo script di elaborazione ASP ordine

Creare una nuova cartella denominata OrderProc nella cartella principale virtuale del server Web (la cartella principale predefinita Ŕ C:\Inetpub\Wwwroot). Nella cartella OrderProc, creare un nuovo file denominato OrderEntry.asp con lo script riportato di seguito. Lo script utilizza il database di Access di Northwind di esempio; si potrebbe essere necessario modificare il percorso di Northwind.mdb nella stringa di connessione (sConn) per associare l'installazione di 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
 
%> 
				
per elaborare correttamente una richiesta di ordine, questo script ASP prevede dati XML strutturati come segue:

<?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>
					
Questo file XML designa un ordine per il cliente con l'ID di "BOTTM". L'ordine contiene due elementi: 11 unitÓ del prodotto con l'ID di 4 e 2 unitÓ del prodotto con l'ID di 18.

Lo script ASP non alcuni gestione degli errori per garantire che i client hanno purchÚ con le informazioni sugli ordini valido. I client necessario fornire un ID cliente e una almeno un elemento, se questi criteri non vengono soddisfatti, lo script ASP non elabora l'ordine e restituisce un errore.

Lo script ASP restituisce dati XML a client che si sono apportate a una richiesta di ordine. Questo file XML indica l'esito positivo o il negativo dell'ordine di elaborazione e fornisce inoltre il numero dell'ordine di successo:

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

Passaggio 2: Creare l'interfaccia di cartella di lavoro per ordini

  1. In Excel, Ŕ necessario avviare una nuova cartella di lavoro.
  2. Immettere le etichette nelle celle A1, A3, B3 e C3, come illustrato di seguito:
    A1:   Customer ID    B1:                C1:
    A2:                  B2:                C2:
    A3:   Product ID     B3:   Quantity     C3:   Price
    					
  3. Selezionare le celle dell'intervallo a1: B1. Dal menu Inserisci , scegliere Nome e quindi fare clic su Crea . Selezionare la Colonna sinistra nella finestra di dialogo Crea nomi , quindi OK . Questo crea il nome definito Customer_ID per la cella B1.
  4. Selezionare le celle A3:C8. Dal menu Inserisci , scegliere Nome e quindi fare clic su Crea . Selezionare la Riga superiore nella finestra di dialogo Crea nomi , quindi OK . VerrÓ creato rispettivamente i nomi definiti Product_ID , quantitÓ e Prezzo per celle A4:A8, B4:B8 e C4:C8.
  5. Premere ALT+F11 per avviare Visual Basic Editor.
  6. In Visual Basic Editor, dal menu Inserisci , scegliere il modulo . Aggiungere la macro riportata di seguito al modulo di codice:
    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
    					
    Nota : modifica YourWebServer nella costante sFolder al nome del server Web.

  7. Chiudere l'editor di Visual Basic e tornare a Excel.
  8. Salvare la cartella di lavoro nella cartella OrdrProc Ŕ stato creato in precedenza come Invoice1.xls.
Il "modulo nel ordine della selezione" Ŕ essenzialmente A1:C8 celle. La macro recupera il formato XMLSS per la maschera Ordini e li carica in un nuovo oggetto DOMDocument . Quindi carica il foglio di stile XSL (Extensible Stylesheet Language) in un altro DOMDocument e trasforma il formato XMLSS in una struttura XML che l'ASP pu˛ interpretare come un nuovo ordine. La macro utilizza l'oggetto XMLHTTP per registrare l'ordine XML allo script ASP sul server Web. Lo script ASP elabora l'ordine e quindi restituisce XML pi¨ alla macro per informazioni sullo stato ordine.

Nota : come una scelta di progettazione, l'attivitÓ di trasformazione il formato XMLSS in XML di ordine personalizzato viene assegnato il codice della macro lato client. Inoltre, Ŕ possibile registrare il formato XMLSS allo script ASP e consentire ASP di eseguire la trasformazione a.

Passaggio 3: Creare il foglio di stile

Nella cartella OrdrProc, creare un nuovo file denominato OrderEntry.xsl e incollare il seguente codice 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>
				
il XSL trasforma il formato XMLSS al codice personalizzato ordine XML (illustrato nel passaggio 1) come indicato di seguito:
  • Il file XSL attraversamento di gerarchia di nodi finchÚ non incontra un nodo di <cell> che contiene il <namedcell> e nodi figlio <data> individua l'ID cliente. Viene verificato che <namedcell> ha un attributo di ss:Name uguale a 'Customer_ID' e che <data> ha un attributo di ss:Type che non Ŕ uguale a 'Error'.
  • Per individuare gli elementi per l'ordine, il file XSL consente di trovare tutti i nodi <row> con un nodo <cell> i che contengono un nodo figlio di <namedcell> con un attributo ss:Name di 'Product_ID' e un nodo figlio di <data> con un attributo ss:Type che non Ŕ 'Error'.
  • Per ogni <row> che il file XSL determina Ŕ un elemento l'ordine, il file XSL utilizza modelli per corrispondono i nodi di <namedcell> che dispongono di un attributo ss:Name di 'Product_ID', 'QuantitÓ' e "Prezzo".

Passaggio 4: Esecuzione il codice di esempio di elaborazione di un nuovo ordine

  1. Tornare a Invoice1.xls in Excel.
  2. Per simulare il movimento di ordine, aggiornare Sheet1 con informazioni relative a clienti e prodotti come illustrato di seguito:
    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
    					
    Nota : per questo esempio, Ŕ necessario immettere cliente e il prodotto ID validi per lo script ASP per elaborare correttamente l'ordine.

  3. Scegliere macro dal menu Strumenti , quindi macro . Selezionare la macro ProcessOrder nell'elenco e scegliere Esegui .
  4. Se lo script ASP elabora correttamente l'ordine, riceverai un messaggio con il nuovo numero di ordine. Avviare Microsoft Access e aprire il database di esempio Northwind. VerrÓ visualizzata una nuova voce di questa tabella con l'ID ordine restituito da ASP. Vengono visualizzati due nuovi movimenti nella tabella Dettagli ordini lo stesso ID di ordine. Uscire da Access e tornare a Invoice1.xls in Excel.
  5. Deselezionare l'ID cliente nella cella B1 e rieseguire la macro. In questo caso, il server Ŕ Impossibile elaborare l'ordine e restituisce un errore che indica che non Ŕ stato fornito alcun ID cliente.

Download

ExcelXML.exe contiene l'esempio descritto in questo articolo, nonchÚ una versione avanzata del Invoice1.xls. Invoice2.xls utilizza la stesso script ASP e di un foglio di stile XSL come Invoice1.xls. Tuttavia, Invoice2.xls viene illustrato ulteriori caratteristiche di Excel, come la protezione del foglio di lavoro, la convalida dei dati e formule Cerca.VERT, che Ŕ possibile utilizzare per fornire un modulo pi¨ intuitivo per gli ordini.

Il seguente file Ŕ disponibile per il download dall'Area download Microsoft:
Excelxml.exe
Data di rilascio: 3 aprile 2001

Per ulteriori informazioni su come scaricare file di supporto Microsoft, fare clic sul numero dell'articolo della Microsoft Knowledge Base riportato di seguito riportato:
119591Come ottenere file di supporto Microsoft dai servizi online
Microsoft analizzati questo file per individuare eventuali virus. Microsoft ha utilizzato il software antivirus pi¨ recente disponibile alla data di pubblicazione del file. Il file Ŕ archiviato in server con protezione avanzata per impedire modifiche non autorizzate al file.

Riferimenti

Per ulteriori informazioni sull'utilizzo di XML e ASP per creare soluzioni lato server, vedere i seguenti siti Web MSDN (informazioni in lingua inglese):
Introduzione a XML
http://www.microsoft.com/learning/en/us/syllabi/2500AFinal.mspx

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

Guida per gli sviluppatori di XSL
http://msdn.microsoft.com/en-us/library/ms862738.aspx

L'invio di XML tra il client e server
http://msdn.microsoft.com/en-us/library/ms763733.aspx

Per ulteriori informazioni, fare clic sui numeri degli articoli della Microsoft Knowledge Base riportati di seguito:
288215INFORMAZIONI: Excel 2002 e XML
285891Utilizzo di Visual Basic o ASP per creare un foglio di calcolo XML per Excel 2002
288130Utilizzo di ASP per creare il foglio di calcolo XML per la visualizzazione sul lato client con
(c) Microsoft Corporation 2001, tutti i diritti riservati. Con il contributo di Lori B. Turner, Microsoft Corporation.

ProprietÓ

Identificativo articolo: 278976 - Ultima modifica: lunedý 29 gennaio 2007 - Revisione: 4.8
Le informazioni in questo articolo si applicano a:
  • Microsoft Visual Basic 6.0 Professional Edition
  • Microsoft Excel 2002 Standard Edition
Chiavi:á
kbmt kbdownload kbdownload kbfile kbhowto KB278976 KbMtit
Traduzione automatica articoli
Il presente articolo Ŕ stato tradotto tramite il software di traduzione automatica di Microsoft e non da una persona. Microsoft offre sia articoli tradotti da persone fisiche sia articoli tradotti automaticamente da un software, in modo da rendere disponibili tutti gli articoli presenti nella nostra Knowledge Base nella lingua madre dell?utente. Tuttavia, un articolo tradotto in modo automatico non Ŕ sempre perfetto. Potrebbe contenere errori di sintassi, di grammatica o di utilizzo dei vocaboli, pi¨ o meno allo stesso modo di come una persona straniera potrebbe commettere degli errori parlando una lingua che non Ŕ la sua. Microsoft non Ŕ responsabile di alcuna imprecisione, errore o danno cagionato da qualsiasi traduzione non corretta dei contenuti o dell?utilizzo degli stessi fatto dai propri clienti. Microsoft, inoltre, aggiorna frequentemente il software di traduzione automatica.
Clicca qui per visualizzare la versione originale in inglese dell?articolo: 278976
LE INFORMAZIONI CONTENUTE NELLA MICROSOFT KNOWLEDGE BASE SONO FORNITE SENZA GARANZIA DI ALCUN TIPO, IMPLICITA OD ESPLICITA, COMPRESA QUELLA RIGUARDO ALLA COMMERCIALIZZAZIONE E/O COMPATIBILITA' IN IMPIEGHI PARTICOLARI. L'UTENTE SI ASSUME L'INTERA RESPONSABILITA' PER L'UTILIZZO DI QUESTE INFORMAZIONI. IN NESSUN CASO MICROSOFT CORPORATION E I SUOI FORNITORI SI RENDONO RESPONSABILI PER DANNI DIRETTI, INDIRETTI O ACCIDENTALI CHE POSSANO PROVOCARE PERDITA DI DENARO O DI DATI, ANCHE SE MICROSOFT O I SUOI FORNITORI FOSSERO STATI AVVISATI. IL DOCUMENTO PUO' ESSERE COPIATO E DISTRIBUITO ALLE SEGUENTI CONDIZIONI: 1) IL TESTO DEVE ESSERE COPIATO INTEGRALMENTE E TUTTE LE PAGINE DEVONO ESSERE INCLUSE. 2) I PROGRAMMI SE PRESENTI, DEVONO ESSERE COPIATI SENZA MODIFICHE, 3) IL DOCUMENTO DEVE ESSERE DISTRIBUITO INTERAMENTE IN OGNI SUA PARTE. 4) IL DOCUMENTO NON PUO' ESSERE DISTRIBUITO A SCOPO DI LUCRO.

Invia suggerimenti

 

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