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.
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
- In Excel, è necessario avviare una nuova cartella di lavoro.
- 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
- 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.
- 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.
- Premere ALT+F11 per avviare Visual Basic Editor.
- 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.
- Chiudere l'editor di Visual Basic e tornare a Excel.
- 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
- Tornare a Invoice1.xls in Excel.
- 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.
- Scegliere macro dal menu Strumenti , quindi macro . Selezionare la macro ProcessOrder nell'elenco e scegliere Esegui .
- 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.
- 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
(http://download.microsoft.com/download/excel2002/sample/1.0/win98me/en-us/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:
119591
(http://support.microsoft.com/kb/119591/EN-US/
)
Come 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.
Per ulteriori informazioni sull'utilizzo di XML e ASP per creare soluzioni lato server, vedere i seguenti siti Web MSDN (informazioni in lingua inglese):
Per ulteriori informazioni, fare clic sui numeri degli articoli della Microsoft Knowledge Base riportati di seguito:
288215
(http://support.microsoft.com/kb/288215/EN-US/
)
INFORMAZIONI: Excel 2002 e XML
285891
(http://support.microsoft.com/kb/285891/EN-US/
)
Utilizzo di Visual Basic o ASP per creare un foglio di calcolo XML per Excel 2002
288130
(http://support.microsoft.com/kb/288130/EN-US/
)
Utilizzo 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.
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
| kbmt kbdownload kbdownload kbfile kbhowto KB278976 KbMtit |
Traduzione automatica articoliIl 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
(http://support.microsoft.com/kb/278976/en-us/
)
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.