ASP操作Excel的技术方案
作者:林百欣科技中专 郑烁
笔者近期使用ASP编程技术为学校开发了内部管理系统,采用B/S模式,并将系统运行在架设于校园网管理中心的服务器上,开发过程碰到了使用ASP操作Excel的问题,通过查阅大量的资料和实践,终于比较妥善的解决了,现将此解决方案总结如下。
一、前言
我校在去年建成千兆光纤校园网,为了在校园内更好利用这条网络高速公路,促进学校办公信息化、现代化的建设,学校各部门纷纷提出要开发有利于管理、提高效率的部门软件要求。于是,本人为学校内部管理系统进行了总体的规划,决定使用ASP编程技术,采用浏览器/服务器(B/S)模式,并将系统运行在架设于校园网管理中心的服务器上。
B/S模式具有以往C/S模式所不及的很多特点,它的更加开放、与软硬件无关、应用扩充和系统维护升级方便等等,已成为局域网上首选的计算模式,目前许多原先在C/S下的很多软件也都开始移植到B/S模式下。所以采用B/S模式,本人认为是在充分利用高速局域网设备,利用先进网络编程技术开发的具有前瞻性和实用性的系统模式。但由于B/S模式的特殊性,原来在C/S下相对较易实现的对Excel操作,如报表的生成、打印等功能在B/S下却成为一个难点。本文赘述的就是这个难点的解决方案。
报表的生成、打印往往是应用系统软件必须的功能,例如:教务部门软件,需要对学生学年成绩的查询、打印,对各班课表、教师上课时间安排的查询、打印;招生管理部门软件,需要对不同条件的报名考生的汇总、查询、打印,等等,不同部门、系统的不同功能需要各种不同的报表来满足数据信息的输出。ASP编程是以WEB页为表现形式的,所以现行系统在处理数据打印时,大多数均直接采用打印WEB页来实现用户的要求,但在内部管理系统中,更多时候是用户需要能将查询数据按一定的模式来输出打印、多页打印,甚至可以实现套打功能,或者能自行编辑查询数据。那么这里就要涉及到使用第三方软件来帮助数据不同输出打印的要求了,而考虑到用户一般对Microsoft Office系列办公软件的操作还是比较熟悉的,所以,本人选用Excel电子表格来承接查询数据的输出和打印要求,应该是一种比较可行和通用的办法。
二、ASP操作Excel的技术实现
本人采用系统平台是Windows2000+Access+IIS5.0,报表采用的是Excel,要求按照给定的报表格式生成考生查询信息的报表,并能够打印。
(1)Excel报表模板的制作:
根据给定的报表格式,制作一个Excel模板(就是要打印的报表的表格),需要填充动态数据的单元格要留空,保存为模板格式,将它存放在ASP程序所在位置的子目录中,如:\OutputExcel\book1.xlt。
(2)建立Excel.Application对象:
set objExcel=CreateObject("Excel.Application")
(3)打开Excel模板并选中工作页
objExcel.Workbooks.Open(server.mappath("\OutputExcel")&"\book1.xlt")
objExcel.Sheets(1).select
set sheetActive=objExcel.ActiveWorkbook.ActiveSheet
(4)在工作表中添加某个数据,如在G4单元格中添加系统日期,
sheetActive.range("g4").value=date()
(5)在工作表中某个区域添加多个数据,如:从工作表的第二行A2至R2开始,添加从数据据库查询的考生准考证号、考生姓名、性别、中考成绩、所在地字段的数据。代码如下:
num=2
do while not rs.EOF
strRange="A"&num&":E"&num '设定要填写内容的单元区域
sheetActive.range(strRange).font.size=10 '设定字体大小
sheetActive.range(strRange).WrapText=false '设定文字回卷
sheetActive.range(strRange).ShrinkToFit=true '设定是否自动适应表格单元大小
sheetActive.range(strRange).value=array(rs("准考证号"),rs("姓名"),rs("性别"),rs("中考成绩"),rs("所在地"))
num=num+1
rs.MoveNext
loop
(6)Excel临时报表文件的保存及处理
运行中应该注意每次一个用户进行报表生成时都采用一个临时的Excel文件,如果这个临时的文件采用固定文件名,那么只有第一次会成功生成,以后操作会因为已存在同名文件而导致创建失败。如果采用随机文件名,在每次生成文件之前应该将前面生成文件全部删除,这会导致多个用户同时创建时出现文件丢失问题。本人权衡这两种方法的利弊,根据内部管理系统用户(管理员)人数一般有限,如我校的招生管理系统用户没超过10人,教务管理系统用户没超过80人,所以决定采用第一种方法,同时临时文件名由用户登录时生成的Session值构成,在系统正式运行前,在\OutputExcel目录下,先使用报表模板创建与所有用户相对应的,由各用户的ID构成的Excel文件,然后使用下面代码,问题即可妥善解决,同时可实现报表文件的下载。代码如下: