使用Excel创建动态Web-based表

ZDNet软件频道 时间:2002-07-19 作者:BUILDER.COM |  我要评论()
本文关键词:
大多数的Windows软件开发人员都知道使用Word以及Excel 2000/XP可以将动态表文件按照网络页面的形式进行存储。然而,如果你希望能够在服务器端不添加额外的工具就可以创建动态表的话又该怎么办呢?
大多数的Windows软件开发人员都知道使用Word以及Excel 2000/XP可以将动态表文件按照网络页面的形式进行存储。然而,如果你希望能够在服务器端不添加额外的工具就可以创建动态表的话又该怎么办呢?其实很简单,首先让我们假设在客户端计算机上已经安装了Office XP或者Office 2000。

让我们来看看如果你希望以会计账目的形式创建一个Excel表,具体该如何去做:

  • 负值设为红颜色。
  • 这个表应该包含五个项目:日期、组、说明、总额以及余额。
  • 项目标题使用粗体字并且要设置在居中的位置。
  • 数据的第一行是结余,下面一行所代表的是账目上边的每一笔单独的交易,这个余额项目能够对之前的结余以及当前数目进行求和。

为了能够让你以这种形式组织你的表,首先要做的就是创建一个新的表。然后在第一行中添入适当的项目标题,并且把这些项目设置成为需要的形式。剩下的行的内容取决于实际的数据。因此,只需创建一行来代表数据,然后把这个文件以网络页面的形式进行存储,一定要确信你选择的是Add Interactivity检查框。

下一步,在编辑器中打开存储了的文件,通过这个编辑器,你应该能够察看源代码,你可以选择记事本作为你的编辑器。这个文件应该包含一个OBJECT标记符,并且它还带有若干个PARAM标记符。如果你使用的是Office XP,PARAM名会变为XMLData。这个PARAM标记符拥有数值的属性,并且被设置到一个巨大的HTML-encoded列。这个值是HTML-encoded XML,Excel使用这个值来创建表。下面是一个OBJECT标记符的例子,并且其中还有PARAMs(这个代码为了节省空间而被缩短了。):

<object id="Book2_18794_Spreadsheet" classid="CLSID:
0002E551-0000-0000-C000-000000000046">
<param name=DisplayTitleBar value=false>
<param name=Autofit value=true>
<param name=DataType value=XMLData>
<param name=XMLData value="&lt;?xml version=&quot;1.0&quot;?&gt;
&lt;Workbook xmlns=&quot;urn:schemas-microsoft-com:office:spreadsheet
&quot; xmlns:o=&quot;urn:schemas-microsoft-com:office:office
&quot; xmlns:x=&quot;urn:schemas-microsoft-com:office:excel
&quot; xmlns:ss=&quot;urn:schemas-microsoft-com:office:spreadsheet
&quot; &# 10; xmlns:html=&quot;http://www.w3.org/TR/REC-html40"> &lt;DocumentProperties xmlns=&quot;urn:schemas-microsoft-
com:office:office&quot;&gt; ..">

复制XMLData参数值,然后粘贴到一个新的文件中去。把这个文件保存为.htm格式的文件,这是由于你将来会希望使用IE浏览器来打开这个文件,然后再复制这个HTML-decoded文本。当你在IE浏览器中察看这个文件的时候,你将会看到一个像下面这样的页面:

<?xml version="1.0"?> <Workbook xmlns="urn:schemas-microsoft-
com:office:spreadsheet"
 xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:ss="urn:schemas
-microsoft-com:office:spreadsheet" xmlns:html="http://www.w3.org/TR/REC
-html40">...

这就是你将会对其进行重新设置来创建合适输出的XML。

把这个文件以.xls文件的形式进行保存,然后在Excel中打开,以检查其格式。这就是Office XP和Office 2000之间的差别:XP是经过扩展后能够提供额外功能,其中带有额外的项目、行以及每一个单元的名称。但是Office2000保持了一个TABLE-TR-TD界面,其中带有对每一个组件的类型定义。

现在,试着把不明确的类型名去掉,删除大多数不同标记符的默认类型,然后把它们的类型进行统一的规格化。在XP中,创建类型名称是比较简单的,但是在2000中,类型是被创建在文件中的一个STYLE块中的。当然,在2000中,你也能够通过使用style属性为特定的组件设置它们单独的类型,或者通过使用XP中的ss:[style_attribute]属性来完成这一操作。你还会希望能够从XML中删除一些不必要的标记符,其中包括PublishObjects、children、LastSaved、WindowHeight以及WindowWidth。

在整理好你的XML之后,在Excel中再试一下,以检验它是否能够正常的工作。如果这一步通过,那么接下来就可以进入下一个步骤了。

创建一个新的ASP页面,然后把在Response对象中的Expires或者ExpiresAbsolute工具设置成能够保证这个页面能够一直处于能够被更新的状态。把ContentType转换成为application/vnd.ms-excel。然后添加一个被称为Content-Disposition的标题,如果你希望这个表能够在浏览器中被察看,那么就把它的值设置成inline; filename="filename.xls";此外,可以通过设置attachment; filename="filename.xls"来让这个表在浏览器之外也可以被显示。

你可以去掉静态的XML(比如说那些项目标题和工作表的信息),并且把它直接放入你的ASP页面中去。加入一个脚本代码块可以帮助察看动态数据的XML的XSL转换。

<%
Dim oDOM, oXSL
Set oDOM = Server.CreateObject("MSXML.DOMDocument")
Set oXSL = Server.CreateObject("MSXML.DOMDocument")
oDOM.async = false;
oXSL.async = false;
If oDOM.loadXML(GetDataXML()) Then
If oXSL.load("xsldoc.xsl") Then
Response.Write oDOM.transformNode(oXSL)
End If
End If
%>

现在只剩下最后一步了,就是来创建一个能够在XML数据上执行转换的XSL,这可以通过GetDataXML() 程序来进行。只需简单的创建你的XSL,就可以产生能够完成这个表的那些行。


责任编辑:炒饭

欢迎评论或投稿


百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
京公网安备:1101082134