繁体中文
设为首页
加入收藏
当前位置:ASP技术首页 >> ASP基础 >> 怎样把数据汇到Excel中的心得经验

怎样把数据汇到Excel中的心得经验

2006-07-15 08:00:00  作者:  来源:互联网  浏览次数:0  文字大小:【】【】【
简介:经常看到有些人问怎么把Table的资料转到Excel里面去,很多人在碰到这个问题都先考虑用execl.appliction,我用过感觉很不好,首先必需要掌握它的一些内部用法,其次它在客户端使用时涉及安全性,使用不太好,以下...

经常看到有些人问怎么把Table的资料转到Excel里面去,很多人在碰到这个问题都先考虑用execl.appliction,我用过感觉很不好,首先必需要掌握它的一些内部用法,其次它在客户端使用时涉及安全性,使用不太好,以下给大家介绍三众方法:

方法一:用单纯的文本格式实现

该方法相当简单,以下给出代码,各位就容易明白

<% set fso=server.createobject("scripting.filesystemobject")

strExcelFile=server.MapPath("txtToExcel.xls")

if fso.fileExists(strExcelFile) then fso.deletefile strExcelFile

Set xslFile = fso.CreateTextFile(strExcelFile , True)

xslFile.WriteLine("df" & vbTab & "345" & vbLf & "fe" & vbTab & "mon" &vbLf)

xslFile.Close

set fso=nothing

response.write "OK"

%>

原理:

相信大家都知道,Excel是可以打开文本文件的(什么?你不知道,先回去做两个月的文员再来编程,太不懂打破规则了),而对于里面的文本内容Excel则会这样处理:如果遇到[制表符]Tab键则跳下一列,如果遇到[换行符]则换下一行,所以根据这个规则我们整理一下就可以产生单一表格式Excel文件了,

优点:

掌握简单,纯粹的文字整理而已(哈!原来不就是文字游戏而已,哼!提到游戏就精神了吧)

缺点:

效率较低,把一个较多内容的table转成Excel档要则执行较长的循环(),而文档格式只能是规则的行列格式,对表格不能做更多的设置

方法二:用OWC实现:

此方法也简单(OWC!不又要学新东西了?放心,非常简单,只要你具备男国足的头脑就OK,什么?还不够,拖出去海扁九九八十二下,不好意思,打上瘾,多了一下),只是少为人知而已(在网上我没看到其他人用过),同样先给出代码:

gdsssa445
gdsssa445

原理:

大家应该看出这是前端脚本HTML实现,其实这是利用OWC的功能来转出Excel档,我们只需整理出一个Table档(我还不会做这个Table档呢!哐啷,晕了),基本上我们整理出的Table在网页上是什么样子,在Excel上就是什么样子,但要注意:

Sheet1

False

False

False

(哇!压缩了这么多,难怪MS的软件都这么大),当然可能我也把一些有用的删掉了,各位发现有枉杀的帮我平反一下(不要以为学习这么容易,当然要做点事啦)

然后是第三部分,这一部分如果还是通过循环来读出然后再整理成Table的HTML脚本,那就太不思进取了,众所周知,我们可以通过recordset来读取数据的指定内容,而且可以通过save来直接把那些内容生成一个XML文件,所以我们只需要根据这个XML文件写一个xsl文件来转换就...哈,取得西经了,那么这个方法是我认为最好的,因为我们可以任意设定Table的样式,同时不必诸多循环,有效解决Excel一些自做聪明的小动作(那些小动作?你在Excel输入3423423423424这串数字看看,还有日期时间格式之类的),

思路就说完了,怎么实现就靠各人自己动手了。

这种方法的优点是你可以定制很好的格式的Excel文件,只要你xsl会写,包括统计都可以做出来,所以懂xsl的人估计来到这里比较明白了,而且效率很高,不用再慢慢循环了

缺点嘛:就是技术要求高了一点,至于算有多高,各人不同了。

最后附上我的代码,希望大家不要停留于抄代码,能有所改进,当然有更好的方法别忘记通知一下我哦!

===========XMLToExcel.ASP=============

<% Set Conn=Server.CreateObject("ADODB.Connection")

Conn.Open "Provider = Microsoft.Jet.OLEDB.4.0; Data Source ="& Server.MapPath("comp_apply.mdb")

'strSelect="select dept_no,dept_name,dept_check from dept_data"

strSelect="select * from user_data"'改变该SQL语句则可改变Excel的内容

Set rs=server.createobject("adodb.recordset")

rs.open strSelect,conn,1,1

set fso=server.createobject("scripting.filesystemobject")

strXMLFile=server.MapPath("XMLToExcelTmp.XML")

strXslFile=server.MapPath("XMLToExcel.xsl")

strExcelFile=server.MapPath("XMLToExcel.xls")

if fso.fileExists(strXMLFile) then fso.deletefile strXMLFile

rs.save strXMLFile,1

rs.close

Conn.close

set Conn=nothing

set XMLDoc=server.createobject("microsoft.XMLdom")

set xslDoc=server.createobject("microsoft.XMLdom")

xslDoc.load(strXslFile)

XMLDoc.load(strXMLFile)

XMLDoc.loadXML(XMLDoc.transformNode(xslDoc))

if fso.fileExists(strExcelFile) then fso.deletefile strExcelFile

Set xslFile = fso.CreateTextFile(strExcelFile , True)

xslFile.WriteLine(XMLDoc.XML)

xslFile.Close

fso.deletefile strXMLFile

set fso=nothing

response.redirect "XMLToExcel.xls"

%>

==============XMLToExcel.xsl=============

XMLns:s='uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882'

XMLns:dt='uuid:C2F41010-65B3-11d1-A29F-00AA00C14882'

XMLns:rs='urn:schemas-microsoft-com:rowset'

XMLns:z='#RowsetSchema'>

Sheet1

False

False

False

补充一下:对于第三种方法因为Recordset 用 Save方法后有时对于那些null的字段在row中不会有它的字段名,所以我现在通过去ElementType那里读取字段名,以保证不造成到时的Excel的纵列方位出错,但这个问题在.net里的DataSet确很好解决,因为DataSet中如果碰到这种null的数据它也会有这样的空节点出现

责任编辑:admin
相关文章