你目前正处于脱机状态,正在等待 Internet 重新连接

如何使用 ASP 构建在客户端显示的 XML 表格

Support for Office 2003 has ended

Microsoft ended support for Office 2003 on April 8, 2014. This change has affected your software updates and security options. Learn what this means for you and how to stay protected.

概要
本文介绍了 Active Server Pages (ASP) 脚本,这种脚本可通过 Office 电子表格组件以 XML 表格 (XMLSS) 格式构建电子表格。XMLSS 可在客户端通过以下方式之一显示:
  • 在网页上的电子表格组件中显示。
  • 在浏览器内置的 Microsoft Excel 中显示。
  • 直接在 Microsoft Excel 中打开。
更多信息
与服务器端 Microsoft Excel 自动化相比,使用服务器端代码中的电子表格组件构建电子表格可提供更强的伸缩性和更好的性能。Microsoft 不推荐在服务器上自动化 Office 应用程序(包括 Excel),如果使用其他方法可以获得相同结果,应避免这种做法。XMLSS 可以保留电子表格组件和 Microsoft Excel 的许多通用功能,例如,含多个工作表的工作簿、单元格格式、自动筛选、单元格公式和重新计算功能。电子表格组件具有与 Microsoft Excel 对象模型非常匹配的对象模型。因此,如果您熟悉 Excel 对象模型,则可以轻松应用一些现有的 Excel 代码,并进行修改以用于电子表格组件。

以下示例说明了如何使用电子表格组件和 ASP 在 XMLSS 中生成含多个工作表的工作簿。该示例还讨论了如何在网页或 Microsoft Excel 中显示生成的 XMLSS 客户端。

使用电子表格组件构建 XMLSS 的 ASP 脚本

将下面的 ASP 另存为 XMLSS.asp,并保存在 Web 服务器的虚拟根目录中(默认的根目录为 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.EndFunction 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 = aOrderInfoEnd FunctionFunction GetProductIDs()    ReDim aPIDs(NumProds, 1)    For r = 0 To NumProds-1        aPIDs(r, 0) = r+1    Next    GetProductIDs = aPIDsEnd Function%>				

在网页上显示 XMLSS

要在网页上显示示例 XMLSS,只需将电子表格组件的 XMLURL 属性设置为 ASP 的 URL,如下所示:
<html><body><object classid="clsid:0002E551-0000-0000-C000-000000000046" id="Spreadsheet1">  <param name="XMLURL" value="http://YourWebServer/xmlss.asp"></object></body></html>				

注意:如果使用的是 Office 2003,则必须根据需要更改以上代码中的 classid。

在上述 HTML 中,使用 <param> 标记设置 XMLURL 属性。如果需要,还可以在运行时设置 XMLURL 属性:
   Spreadsheet1.XMLURL = "http://YourWebServer/xmlss.asp"				

在 Microsoft Excel 中显示 XMLSS

使用电子表格组件创建的 XMLSS 可以在 Microsoft Excel 中打开。在电子表格组件中实现的格式和功能可与 Microsoft Excel 共享。有一些功能是电子表格组件支持而 Excel 不支持的(或 Excel 支持而电子表格组件不支持);Excel 未实现的任何 XML 标记或属性在打开 XMLSS 时都将被忽略。

要在 Microsoft Excel 中查看示例 ASP 脚本的结果,请执行下列操作:
  1. 启动 Microsoft Excel。
  2. 文件菜单上,单击打开
  3. 文件名框中,键入 http://YourWebServer/xmlss.asp,然后单击打开
检查工作簿,在 Excel 中打开该工作簿时您会注意到,运行时应用的数据和格式都显示在工作簿中。有一个例外情况:在电子表格组件中创建的标题不会带入 Excel,因为这是电子表格组件的功能,而 Microsoft Excel 中不提供该功能。如果使用电子表格组件创建 XMLSS 以便在 Excel 中显示文件,请注意两者各自支持的不同功能。

在 Microsoft Excel 中打开 ASP 创建的 XMLSS 的另一种方法是,在 ASP 中提供 Excel 多用途 Internet 邮件扩展 (MIME) 类型作为 ContentType。使用 Excel MIME 类型并浏览到 ASP 时,XMLSS 可在浏览器内置的 Microsoft Excel 中显示,如下所示:
  1. 在文本编辑器中打开 XMLSS.asp。
  2. 在脚本中找到以下行:
    Response.ContentType = "text/xml"					
    将其更改为:
    Response.ContentType = "application/vnd.ms-excel"					
  3. 保存对 XMLSS.asp 所做的更改并启动 Internet Explorer (IE)。
  4. 浏览到 http://YourWebServer/XMLSS.asp。XML 表格将在浏览器内置的 Microsoft Excel 中显示。
参考
有关其他信息,请访问下面的 Microsoft 网站,查看 Office Web Components 主题:有关其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
285891如何使用 Visual Basic 或 ASP 创建 Excel 2002 和 Excel 2003 的 XML 表格
278976 如何使用 XSL 转换在服务器端使用的 Excel XML 表格
257757 服务器端 Office 自动化应考虑的因素
属性

文章 ID:288130 - 上次审阅时间:12/06/2005 04:31:00 - 修订版本: 4.2

Microsoft Office Web Components, Microsoft Office Web Components, Microsoft Office Excel 2003, Microsoft Excel 2002 标准版, Microsoft Active Server Pages 4.0

  • kbhowto kbofficewebspread KB288130
反馈
appendChild(m);