网络编程
位置:首页>> 网络编程>> Asp编程>> asp从Excel中筛选符合条件的记录保存至新的Excel中

asp从Excel中筛选符合条件的记录保存至新的Excel中

作者:dnawo 来源:蓝色理想 发布时间:2007-09-06 19:20:00 

标签:Excel,ASP,操作,记录

以前在一个图书类网站看到这样一个功能:客户可以按条件搜索书目的信息,服务器会将符合条件的信息筛选出来保存为一个Excel文件供客户下载。今天有个客户也有这样的要求,于是并好好来学一下ASP对Excel的操作。
 
在网上搜索相关资料后知道ASP操作Excel和操作ACCESS差不多,只是连接方式不一样而已。为了验证下其真实性,建立了个xls文件并输入一些数据,用SQL语句进行查询,并将输出结果,没出现什么错误,再试了试加入一些查询条件,都OK!不过要注意的是在查询中Excel表的书写格式为[表名$];Excel中第一行被认为是字段名称;一些资料中还注明字段名不能包含数字,否则Excel的驱动在遇到这种问题时就会出错,不过我试了试,未发现什么错误,可能是环境的原因,大家实际操作时字段名都用纯字母以保万无一失。
 
搜索出记录集后就要保存了,这边出了问题。为了方便测试,新建了一条SQL语句:sqlstr = "insert into [sheet1$] values('111','222','333','444','555')",然而保存时老出现"操作必须使用一个可更新的查询"的错误,在用access数据库碰到此问题时一般是权限没设置好,可是这次该xls文件所在分区文件系统为fat32,应该不会是权限问题,xls文件只读属性也未钩选,在相同目录下新建一access文件进行添加记录结果也正常,不知是什么原因了?继续在Google、Baidu搜索相关资料,结果大都为asp如何连接excel,如何读取,竟没有人在添加时碰到问题,郁闷!
 
皇天不负有心人,用Insert into添加记录的问题没解决,我却看到了另一篇文章"ASP操作Excel技术总结",其中有一节说服务器中要设置COM组件的操作权限,我本以为是这边权限没设置好,不过按要求设置完重启服务器,不行,重启了两次机子后仍不行只好作罢。文章中还介绍了用Excel对象操作Excel文件的方法,利用Excel对象可新建Excel文件、打开Excel文件、添加记录、保存文件等功能,既然该对象能实现这么多功能,那结合ASP中SQL查询不就可以实现将查询返回的记录集保存到一个新的Excel中了吗?经过一番努力,终于实现了,代码如下:
 

 程序代码

Dim conn,rs,sqlstr 
Set conn=Server.CreateObject("ADODB.Connection")  
Conn.connectionstring="Driver={Microsoft excel Driver (*.xls)};DBQ="& Server.MapPath("book2.xls") 
conn.Open 
Set rs = Server.CreateObject("ADODB.Recordset")  
Sqlstr="select * from [Sheet1$]" 
rs.Open Sqlstr,conn,1,2 
’建立Excel对象 
strAddr=Server.MapPath(".") 
set objExcelApp=CreateObject("Excel.Application") 
objExcelApp.DisplayAlerts=false 
objExcelApp.Application.Visible=false 
’新建Excel文件 
objExcelApp.WorkBooks.add 
set objExcelBook=objExcelApp.ActiveWorkBook 
set objExcelSheets=objExcelBook.Worksheets 
set objExcelSheet=objExcelBook.Sheets(1) 
’将上边新建Excel段改为下边读取已有Excel文件也可以 
’读取已有Excel文件 
’objExcelApp.WorkBooks.Open(strAddr&"\Null.xls") ’必须有这个xls文件存在,可无内容 
’set objExcelBook=objExcelApp.ActiveWorkBook 
’set objExcelSheets=objExcelBook.Worksheets 
’set objExcelSheet=objExcelBook.Sheets(1) 
Dim i,j 
j = 1 
do while not rs.eof 
    for i=0 to rs.Fields.Count-1 
        objExcelSheet.Cells(j,i+1).value=rs(i) 
    next 
    j = j + 1 
    rs.movenext 
loop 
’另存Excel文件 
objExcelBook.SaveAs(strAddr&"\mzwu.xls") ’若存在mzwu.xls则覆盖 
objExcelApp.Quit 
set objExcelApp=Nothing 
rs.close 
set rs=nothing 
Conn.close 
set Conn=nothing 


0
投稿

猜你喜欢

手机版 网络编程 asp之家 www.aspxhome.com