Cómo usar ASP para crear XML de hoja de cálculo para cliente

Resumen

Este artículo ilustra la secuencia de comandos de páginas Active Server (ASP) de Microsoft que crea una hoja de cálculo en el formato de hoja de cálculo XML (XMLSS) mediante el componente Spreadsheet de Office. El XMLSS puede ser cliente mostrado en una de las siguientes maneras:
  • En el componente de hoja de cálculo en una página Web
  • En Microsoft Excel se muestra en el lugar en el explorador
  • Abrir directamente en Microsoft Excel

Más información

Mediante el componente de hoja de cálculo en código de servidor para crear hojas de cálculo proporciona mayor escalabilidad y un mejor rendimiento en lugar de utilizar la automatización de servidor de Microsoft Excel. Hacemos no recomment automatización de aplicaciones Office, como Excel, en el servidor. Este método debe evitarse cuando están disponibles otras alternativas para lograr los mismos resultados. XMLSS puede conservar muchas de las características comunes a tanto el componente de hoja de cálculo como Microsoft Excel. Libros de varias hojas, formato de celda, Autofiltro, fórmulas de celda y el nuevo cálculo representan un puñado de esas características. El componente de hoja de cálculo tiene un modelo de objetos que se ajusta al modelo de objetos de Microsoft Excel. Por lo tanto, si está familiarizado con el modelo de objetos de Excel, puede aplicar fácilmente algunos de su código existente de Excel, con modificación, para su uso con el componente de hoja de cálculo.

El siguiente ejemplo muestra cómo generar un libro con varias hoja en XMLSS mediante el componente de hoja de cálculo con ASP. En el ejemplo también se explica cómo se puede mostrar el resultante XMLSS cliente en una página Web o en Microsoft Excel.

Secuencia de comandos ASP para generar XMLSS mediante el componente de hoja de cálculo

Guarde el siguiente ASP como XMLSS.asp en el directorio raíz virtual del servidor Web. De forma predeterminada, el directorio raíz es 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

%>

Mostrar el XMLSS en una página Web

Para mostrar el ejemplo XMLSS en una página Web, sólo deberá establecer la propiedad XMLURL de un componente de hoja de cálculo para la dirección URL de la página ASP, como sigue:
<html>
<body>

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

</body>

</html>

Nota: Si está utilizando Microsoft Office 2003, tendrá que cambiar el classid en el código anterior según corresponda.

En el código HTML anterior, se establece la propiedad XMLURL mediante una etiqueta < param > . También puede establecer la propiedad XMLURL en tiempo de ejecución si lo desea, utilice el código siguiente.
   Spreadsheet1.XMLURL = "http://YourWebServer/xmlss.asp"

Mostrar el XMLSS en Microsoft Excel

El XMLSS creada con el componente de hoja de cálculo se pueden abrir en Microsoft Excel. El formato y las funciones que implementan en el componente de hoja de cálculo pueden compartirse con Microsoft Excel. El componente Spreadsheet es compatible con algunas características que Excel no. Además, Excel admite algunas características que el componente Spreadsheet no. Las etiquetas XML o atributos que no implementan Excel se omiten cuando se abre el XMLSS.

Para ver los resultados de la secuencia de comandos ASP en Microsoft Excel, siga estos pasos:

  1. Inicie Microsoft Excel.
  2. En el menú archivo , haga clic en Abrir.
  3. En el cuadro Nombre de archivo , escriba http://YourWebServer/xmlss.aspy, a continuación, haga clic en Abrir.
Examinar el libro y tenga en cuenta que los formatos que se aplicaron en tiempo de ejecución y los datos están presentes en el libro al abrirlo en Excel. Hay una excepción: los títulos de encabezado que se crean en el componente Spreadsheet no pasarán a Excel porque ésta es una característica del componente hoja de cálculo que Microsoft Excel no se comparte. Si crea XMLSS mediante el componente de hoja de cálculo con el fin de mostrar el archivo en Excel, tenga en cuenta las diferentes características que admite cada una.

Es otra forma de abrir el XMLSS ASP creada en Microsoft Excel proporcionar el tipo de extensiones multipropósito de correo de Internet (MIME) de Excel como el ContentType en la página ASP. Cuando se utiliza el tipo MIME de Excel y vaya a la página ASP, puede representar el XMLSS en Microsoft Excel en el lugar en el explorador. Para ello, siga estos pasos:
  1. Abra XMLSS.asp en un editor de texto.
  2. Cambie la línea siguiente en la secuencia de comandos:
    Response.ContentType = "text/xml"
    Cambie la línea de código similar a lo siguiente:
    Response.ContentType = "application/vnd.ms-excel"
  3. Guardar los cambios a XMLSS.asp y, a continuación, inicie Windows Internet Explorer.
  4. Vaya a http://YourWebServer/XMLSS.asp. Se procesa la hoja de cálculo XML en Microsoft Excel, alojado en el lugar en el explorador.

Referencias

Para obtener más información, visite el tema de Office Web Components en el siguiente sitio Web de Microsoft:
Para obtener más información, haga clic en los números de artículo siguientes para verlos en Microsoft Knowledge Base:

285891 cómo utilizar Visual Basic o ASP para crear una hoja de cálculo XML para Excel 2002 y Excel 2003

278976 cómo utilizar XSL para transformar la hoja de cálculo XML de Excel para uso del servidor

Consideraciones de 257757 para la automatización de servidor de Office

Propiedades

Id. de artículo: 288130 - Última revisión: 21 ene. 2017 - Revisión: 1

Comentarios