Comment faire pour utiliser ASP pour créer une feuille de calcul XML à afficher côté client

Cet article peut contenir des liens vers des informations en langue anglaise (pas encore traduites).

Résumé

Cet article fournit un script ASP (Active Server Pages) qui permet de créer une feuille de calcul au format XMLSS (XML Spreadsheet) à l'aide du composant Office Spreadsheet. La feuille de calcul XML peut être affichée côté client de plusieurs manières :
  • dans le composant Spreadsheet sur une page Web ;
  • dans Microsoft Excel, sur place dans le navigateur ;
  • directement dans Microsoft Excel.

Plus d'informations

L'utilisation du composant Spreadsheet dans le code côté serveur pour créer des feuilles de calcul offre une évolutivité supérieure et des performances accrues par rapport à l'automatisation côté serveur de Microsoft Excel. Microsoft recommande de ne pas utiliser l'automatisation des applications Office, notamment Excel, sur le serveur. Il convient également de ne pas utiliser l'automatisation lorsque d'autres solutions aboutissant aux mêmes résultats s'offrent à vous. Une feuille de calcul XML peut conserver de nombreuses fonctionnalités communes au composant Spreadsheet et à Microsoft Excel, parmi lesquelles les classeurs à plusieurs feuilles, la mise en forme des cellules, le filtre automatique, les formules de cellules et le recalcul. Le modèle objet du composant Spreadsheet ressemble étroitement à celui de Microsoft Excel. Par conséquent, si vous êtes familier avec le modèle objet Excel, vous pouvez facilement appliquer une partie de votre code Excel existant, en lui apportant quelques modifications, pour l'utiliser avec le composant Spreadsheet.

L'exemple suivant montre comment générer un classeur à plusieurs feuilles au format XMLSS à l'aide du composant Spreadsheet avec un script ASP. Il montre aussi comment afficher côté client la feuille de calcul XML résultante sur une page Web ou dans Microsoft Excel.

Script ASP permettant de créer une feuille de calcul XML à l'aide du composant Spreadsheet

Enregistrez le script ASP suivant en tant que XMLSS.asp dans le répertoire racine virtuel de votre serveur Web (le répertoire racine par défaut est c:\inetpub\wwwroot) :
<% Language=VBScript %>

<%
Response.Buffer = True
Response.ContentType = "text/xml"

Dim NumOrders, NumProds, r
NumOrders = 300
NumProds = 10

Dim oSS
Dim oOrdersSheet
Dim oTotalsSheet
Dim oRange
Dim c

Set oSS = CreateObject("OWC10.Spreadsheet")
Set c = oSS.Constants

'Rename Sheet1 to "Orders", rename Sheet2 to "Totals" and remove Sheet3
Set oOrdersSheet = oSS.Worksheets(1)
oOrdersSheet.Name = "Orders"
Set oTotalsSheet = oSS.Worksheets(2)
oTotalsSheet.Name = "Totals"
oSS.Worksheets(3).Delete

'=== Build the First Worksheet (Orders) ==============================================

'Add headings to A1:F1 of the Orders worksheet and apply formatting
Set oRange = oOrdersSheet.Range("A1:F1")
oRange.Value = Array("Order Number", "Product ID", "Quantity", "Price", "Discount", "Total")
oRange.Font.Bold = True
oRange.Interior.Color = "Silver"
oRange.Borders(c.xlEdgeBottom).Weight = c.xlThick
oRange.HorizontalAlignment = c.xlHAlignCenter

'Apply formatting to the columns
oOrdersSheet.Range("A:A").ColumnWidth = 20
oOrdersSheet.Range("B:E").ColumnWidth = 15
oOrdersSheet.Range("F:F").ColumnWidth = 20
oOrdersSheet.Range("A2:E" & NumOrders + 1 _
).HorizontalAlignment = c.xlHAlignCenter
oOrdersSheet.Range("D2:D" & NumOrders + 1).NumberFormat = "0.00"
oOrdersSheet.Range("E2:E" & NumOrders + 1).NumberFormat = "0 % "
oOrdersSheet.Range("F2:F" & NumOrders + 1).NumberFormat = "$ 0.00" '"_($* #,##0.00_)"

'Obtain the order information for the first five columns in the Orders worksheet
'and populate the worksheet with that data starting at row 2
Dim aOrderData
aOrderData = GetOrderInfo
oOrdersSheet.Range("A2:E" & NumOrders + 1).Value = aOrderData

'Add a formula to calculate the order total for each row and format the column
oOrdersSheet.Range("F2:F" & NumOrders + 1).Formula = "=C2*D2*(1-E2)"
oOrdersSheet.Range("F2:F" & NumOrders + 1).NumberFormat = "_( $* #,##0.00 _)"

'Apply a border to the used rows
oOrdersSheet.UsedRange.Borders(c.xlInsideHorizontal).Weight = c.xlThin
oOrdersSheet.UsedRange.BorderAround , c.xlThin, 15

'Turn on AutoFilter and display an initial criteria where
'the Product ID (column 2) is equal to 5
oOrdersSheet.UsedRange.AutoFilter
oOrdersSheet.AutoFilter.Filters(2).Criteria.FilterFunction = c.ssFilterFunctionInclude
oOrdersSheet.AutoFilter.Filters(2).Criteria.Add "5"
oOrdersSheet.AutoFilter.Apply

'Add a Subtotal at the end of the usedrange
oOrdersSheet.Range("F" & NumOrders + 3).Formula = "=SUBTOTAL(9, F2:F" & NumOrders + 1 & ")"

'Apply window settings for the Orders worksheet
oOrdersSheet.Activate 'Makes the Orders sheet active
oSS.Windows(1).ViewableRange = oOrdersSheet.UsedRange.Address
oSS.Windows(1).DisplayRowHeadings = False
oSS.Windows(1).DisplayColumnHeadings = False
oSS.Windows(1).FreezePanes = True
oSS.Windows(1).DisplayGridlines = False

'=== Build the Second Worksheet (Totals) ===========================================

'Change the Column headings and hide row headings
oTotalsSheet.Activate
oSS.Windows(1).ColumnHeadings(1).Caption = "Product ID"
oSS.Windows(1).ColumnHeadings(2).Caption = "Total"
oSS.Windows(1).DisplayRowHeadings = False

'Add the product IDs to column 1
Dim aProductIDs
aProductIDs = GetProductIDs
oTotalsSheet.Range("A1:A" & NumProds).Value = aProductIDs
oTotalsSheet.Range("A1:A" & NumProds).HorizontalAlignment = c.xlHAlignCenter

'Add a formula to column 2 that computes totals per product from the Orders Sheet
oTotalsSheet.Range("B1:B" & NumProds).Formula = _
"=SUMIF(Orders!B$2:B$" & NumOrders + 1 & ",A1,Orders!F$2:F$" & NumOrders + 1 & ")"
oTotalsSheet.Range("B1:B" & NumProds).NumberFormat = "_( $* #,##0.00 _)"

'Apply window settings for the Totals worksheet
oSS.Windows(1).ViewableRange = oTotalsSheet.UsedRange.Address

'=== Setup for final presentation ==================================================

oSS.DisplayToolbar = False
oSS.AutoFit = True
oOrdersSheet.Activate

Response.Write oSS.XMLData
Response.End


Function GetOrderInfo()
ReDim aOrderInfo(NumOrders,5)
Dim aPrice, aDisc
aPrice = Array(10.25, 9.5, 2.34, 6.57, 9.87, 4.55, 6, 13.05, 3.3, 5.5)
aDisc = Array(0, 0.1, 0.15, 0.2)
For r = 0 To NumOrders-1
aOrderInfo(r, 0) = "'" & String(7-Len(CStr(r+1)), "0") & r+1 'Col 1 is Order Number
aOrderInfo(r, 1) = Int(Rnd() * NumProds) + 1 'Col 2 is Product ID
aOrderInfo(r, 2) = Int(Rnd() * 20) + 1 'Col 3 is Quantity
aOrderInfo(r, 3) = aPrice(aOrderInfo(r, 1)-1) 'Col 4 is Price
aOrderInfo(r, 4) = aDisc(Int(Rnd() * 4)) 'Col 5 is Discount
Next
GetOrderInfo = aOrderInfo
End Function

Function GetProductIDs()
ReDim aPIDs(NumProds, 1)
For r = 0 To NumProds-1
aPIDs(r, 0) = r+1
Next
GetProductIDs = aPIDs
End Function

%>

Affichage de la feuille de calcul XML sur une page Web

Pour afficher l'exemple de feuille de calcul XML sur une page Web, il vous suffit de définir la propriété XMLURL pour un composant Spreadsheet avec l'adresse URL du script ASP, comme suit :
<html>

<body>

<object classid="clsid:0002E551-0000-0000-C000-000000000046" id="Spreadsheet1">
<param name="XMLURL" value="http://YourWebServer/xmlss.asp">
</object>

</body>

</html>

Remarque : si vous utilisez Office 2003, vous devrez peut-être modifier l'identificateur classid dans le code ci-dessus comme il convient.

Dans le code HTML précédent, la propriété XMLURL est définie à l'aide d'une balise <param>. Vous pouvez aussi définir la propriété XMLURL au moment de l'exécution le cas échéant :
   Spreadsheet1.XMLURL = "http://YourWebServer/xmlss.asp"

Affichage de la feuille de calcul XML dans Microsoft Excel

Vous pouvez ouvrir la feuille de calcul XML créée avec le composant Spreadsheet dans Microsoft Excel. La mise en forme et les fonctionnalités que vous implémentez dans le composant Spreadsheet peuvent être partagées avec Microsoft Excel. Certaines fonctionnalités qui sont prises en charge par le composant Spreadsheet ne le sont pas par Excel, et réciproquement ; les balises ou les attributs XML qui ne sont pas implémentés par Excel sont ignorés lorsque la feuille de calcul XML est ouverte.

Pour afficher les résultats de l'exemple de script ASP dans Microsoft Excel, procédez comme suit :

  1. Démarrez Microsoft Excel.
  2. Dans le menu Fichier, cliquez sur Ouvrir.
  3. Dans la zone Nom de fichier, tapez http://votre_serveur_web/xmlss.asp, puis cliquez sur Ouvrir.
Examinez le classeur. Notez que les données et les formats qui ont été appliqués au moment de l'exécution sont tous présents dans le classeur lorsqu'il est ouvert dans Excel. Il existe cependant une exception : les légendes des en-têtes qui sont créées dans le composant Spreadsheet ne sont pas reportées dans Excel, car il s'agit d'une fonctionnalité du composant Spreadsheet qui n'est pas prise en charge par Microsoft Excel. Si vous créez une feuille de calcul XML avec le composant Spreadsheet dans l'intention d'afficher le fichier dans Excel, tenez compte des différentes fonctionnalités qui sont prises en charge par chacun.

Un autre moyen d'ouvrir la feuille de calcul XML créée avec le script ASP dans Microsoft Excel consiste à fournir le type MIME (Multipurpose Internet Mail Extensions) Excel en tant que ContentType dans votre script ASP. Lorsque vous utilisez le type MIME Excel et que vous accédez à votre script ASP, la feuille de calcul XML peut être rendue dans Microsoft Excel sur place dans le navigateur. Pour cela, procédez comme suit :

  1. Ouvrez XMLSS.asp dans un éditeur de texte.
  2. Remplacez la ligne suivante dans le script :
    Response.ContentType = "text/xml"
    par :
    Response.ContentType = "application/vnd.ms-excel"
  3. Enregistrez vos modifications dans XMLSS.asp et démarrez Internet Explorer.
  4. Accédez à http://votre_serveur_web/XMLSS.asp. La feuille de calcul XML est rendue dans Microsoft Excel qui est hébergé sur place dans le navigateur.

Références

Pour plus d'informations, reportez-vous à la rubrique Composants Web Office sur le site Web de Microsoft à l'adresse suivante : Pour plus d'informations, cliquez sur les numéros ci-dessous pour afficher les articles correspondants dans la Base de connaissances Microsoft.

285891 Comment faire pour utiliser Visual Basic ou ASP pour créer une feuille de calcul XML pour Excel 2002

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

257757 INFO : Éléments à prendre en compte pour l'automatisation côté serveur de Microsoft Office

Propriétés

ID d'article : 288130 - Dernière mise à jour : 21 juil. 2006 - Révision : 1

Commentaires