asp操作excel 技术总结

目录
一、  环境配置
二、  asp对excel 的基本操作
三、  asp操作excel 生成数据表
四、  asp操作excel 生成chart图
五、  服务器端excel 文件浏览、下载、删除方案
六、  附录
正文
一、  环境配置
服务器端的环境配置从参考资料上看,微软系列的配置应该都行,即:
1.win9x+pws+office
2.win2000 professional+pws+office
3.win2000 server+iis+office
目前笔者测试成功的环境是后二者。office的版本没有特殊要求,考虑到客户机配置的不确定性和下兼容特性,建议服务器端office版本不要太高,以防止客户机下载后无法正确显示。
服务器端环境配置还有两个偶然的发现是:
1.  笔者开发机器上原来装有金山的wps2002,结果excel 对象创建始终出现问题,卸载wps2002后,错误消失。
2.  笔者开发asp代码喜欢用frontpage,结果发现如果frontpage打开(服务器端),对象创建出现不稳定现象,时而成功时而不成功。扩展考察后发现,office系列的软件其他 如果在服务器端运行,则excel 对象的创建很难成功。
服务器端还必须要设置的一点是com组件的操作权限。在命令行键入“dcomcnfg”,则进入com组件配置界面,选择microsoft excel 后点击属性按钮,将三个单选项一律选择自定义,编辑中将everyone加入所有权限。保存完毕后重新启动服务器。
客户端的环境配置没发现什么特别讲究的地方,只要装有office和ie即可,版本通用的好象都可以。

二、  asp对excel 的基本操作
1、  建立excel 对象
set objexcel app = createobject("excel .application")
objexcel app.displayalerts = false    不显示警告
objexcel app.application.visible = false    不显示界面
2、  新建excel 文件
objexcel app.workbooks.add
set objexcel book = objexcel app.activeworkbook
set objexcel sheets = objexcel book.worksheets
set objexcel sheet = objexcel book.sheets(1)
3、  读取已有excel 文件
straddr = server.mappath(".")
objexcel app.workbooks.open(straddr & " emplet able.xls")
set objexcel book = objexcel app.activeworkbook
set objexcel sheets = objexcel book.worksheets
set objexcel sheet = objexcel book.sheets(1)
4、  另存excel 文件
objexcel book.saveas straddr & " emp able.xls"
5、  保存excel 文件
objexcel book.save    (笔者测试时保存成功,页面报错。)
6、  退出excel 操作
objexcel app.quit  一定要退出
set objexcel app = nothing

三、  asp操作excel 生成数据表
1、  在一个范围内插入数据
objexcel sheet.range("b3:k3").value = array("67", "87", "5", "9", "7", "45", "45", "54", "54", "10")
2、  在一个单元格内插入数据
objexcel sheet.cells(3,1).value="internet explorer"
3、  选中一个范围
4、  单元格左边画粗线条
5、  单元格右边画粗线条
6、  单元格上边画粗线条
7、  单元格下边画粗线条
8、  单元格设定背景色
9、  合并单元格
10、  插入行
11、  插入列

四、  asp操作excel 生成chart图
1、  创建chart图
objexcel app.charts.add
2、  设定chart图种类
objexcel app.activechart.charttype = 97
注:二维折线图,4;二维饼图,5;二维柱形图,51
3、  设定chart图标题
objexcel app.activechart.hastitle = true
objexcel app.activechart.charttitle.text = "a test chart"
4、  通过表格数据设定图形
objexcel app.activechart.setsourcedata objexcel sheet.range("a1:k5"),1
5、  直接设定图形数据(推荐)
objexcel app.activechart.seriescollection.newseries
objexcel app.activechart.seriescollection(1).name = "=""333"""
objexcel app.activechart.seriescollection(1).values = "="
6、  绑定chart图
objexcel app.activechart.location 1
7、  显示数据表
objexcel app.activechart.hasdatatable = true
8、  显示图例
objexcel app.activechart.datatable.showlegendkey = true

五、  服务器端excel 文件浏览、下载、删除方案
浏览的解决方法 很多,“location.href=”,“navigate”,“response.redirect”都可以实现,建议用客户端的方法,原因是给服务器更多的时间生成excel 文件。
下载的实现要麻烦一些。用网上现成的服务器端下载组件或自己定制开发一个组件是比较好的方案。另外一种方法是在客户端操作excel 组件,由客户端操作服务器端excel 文件另存至客户端。这种方法要求客户端开放不安全activex控件的操作权限,考虑到通知每个客户将服务器设置为可信站点的麻烦程度建议还是用第一个方法比较省事。
删除方案由三部分组成:
a:  同一用户生成的excel 文件用同一个文件名,文件名可用用户id号或sessionid号等可确信不重复字符串组成。这样新文件生成时自动覆盖上一文件。
b:  在global.asa文件中设置session_onend事件激发时,删除这个用户的excel 暂存文件。
c:  在global.asa文件中设置application_onstart事件激发时,删除暂存目录下的所有文件。
注:建议目录结构 src 代码目录 emplet 模板目录 emp 暂存目录

六、  附录
出错时excel 出现的死进程出现是一件很头疼的事情。在每个文件前加上“on error resume next”将有助于改善这种情况,因为它会不管文件是否产生错误都坚持执行到“application.quit”,保证每次程序执行完不留下死进程。

评论
# re: asp操作excel 技术总结
这个程序一共由三个文件构成,第一个文件的文件名为:toexcel .asp是主文件,内容如下:
<%
'前面是和来链接到其他数据库 ,请自行书写相关语句,此处略过
sql="select * from [tx_use]" '这里是要输出excel 的查询语句,如 "sesect * form cai where 性别='女'"
filename="excel .xls" ' 要输出的excel 文件的文件名, 你只要改以上两句就行了,其它的都不要改.
'你只要修改以上两变量就行了.其它的我都做好了.
call toexcel (filename,sql)
set conn=nothing
function readtext(filename) '这是一个用于读出文件的函数
set adf=server.createobject("adodb.stream")
with adf
.type=2
.lineseparator=10
.open
.loadfromfile (server.mappath(filename))
.charset="gb2312"
.position=2
readtext=.readtext
.cancel()
.close()
end with
set ads=nothing
end function
sub savetext(filename,data) '这是一个用于写文件的函数
set fs= createobject("scripting.filesystemobject")
set ts=fs.createtextfile(server.mappath(filename),true)
ts.writeline(data)
ts.close
set ts=nothing
set fs=nothing
end sub
sub toexcel (filename,sql) '这是一个根据sql语句综合 和filename生成excel 文件
set rs=server.createobject("adodb.recordset")
rs.open sql,conn,1,3
toexcel lr="<table width='100%'><tr >"
set myfield=rs.fields
dim fieldname(50)
for i=0 to myfield.count-1
toexcel lr=toexcel lr&"<td class="xl24">"&myfield(i).name&"</td>"
fieldname(i)=myfield(i).name
if myfield(i).type=135 then datename=datename&myfield(i).name&","
next
toexcel lr=toexcel lr&"</tr>"
do while not rs.eof
toexcel lr=toexcel lr&"<tr>"
for i=0 to myfield.count-1
if instr(datename,fieldname(i)&",")<>0 then
if not isnull(rs(fieldname(i))) then
toexcel lr=toexcel lr&"<td class="xl25" ><p align='left'>"&formatdatetime(rs(fieldname(i)),2)&"</p></td>"
else
toexcel lr=toexcel lr&"<td class="xl25" ><p align='left'> </p></td>"
end if
else
toexcel lr=toexcel lr&"<td class="xl24" >"&rs(fieldname(i))&"</td>"
end if
next
toexcel lr=toexcel lr&"</tr>"
rs.movenext
loop
toexcel lr=toexcel lr&"</table>"
tou=readtext("tou.txt")
di=readtext("di.txt")
toexcel lr=tou&toexcel lr&di
call savetext(filename,toexcel lr)
end sub
%>
<html>
<head>
<meta http-equiv="refresh" content="3;url=<%=filename%>">
<meta http-equiv="content-language" content="en-us">
<meta http-equiv="content-type" content="text/html; charset=gb2312">
<title>正在生成exlce文件</title>
</head>
<body>
正在生成exlce文件....
</body>
</html>
**************第二个文件名为:di.txt 内容如下:
<table x:str border=0 cellpadding=0 cellspacing=0 width=288 style='border-collapse:
collapse;table-layout:fixed;216pt'>
<![if supportmisalignedcolumns]>
<tr height=0 style='display:none'>
<td width=72 style='54pt'></td>
<td width=72 style='54pt'></td>
<td width=72 style='54pt'></td>
<td width=72 style='54pt'></td>
</tr>
<![endif]>
</table>
************第三个文件的文件名为:tou.txt 内容如下:

<html xmlns:o="urn:schemas-microsoft-com:office:office"
xmlns:x="urn:schemas-microsoft-com:office:excel "
xmlns="http://www.w3.org/tr/rec-html40">
<head>
<meta http-equiv=content-type content="text/html; charset=gb2312">
<meta name=progid content=excel .sheet>
<meta name=generator content="microsoft excel 9">
<link rel=file-list href="./222.files/filelist.xml">
<link rel=edit-time-data href="./222.files/editdata.mso">
<link rel=ole-object-data href="./222.files/oledata.mso">
<!--[if gte mso 9]><xml>
<documentproperties>
<author>xky</author>
<lastauthor>xky</lastauthor>
<created>2002-05-27t17:51:00z</created>
<lastsaved>2002-06-22t10:03:03z</lastsaved>
<company>zydn</company>
<version>9.2812</version>
</documentproperties>
<officedocumentsettings>
<downloadcomponents/>
<locationofcomponents href="file:///e:/msowc.cab"/>
</officedocumentsettings>
</xml><![endif]-->
<style>
<!--table
{mso-displayed-decimal-separator:".";
mso-displayed-thousand-separator:"\,";}
@page
{margin:1.0in .75in 1.0in .75in;
mso-header-margin:.5in;
mso-footer-margin:.5in;}
tr
{mso-height-source:auto;
mso-ruby-visibility:none;}
col
{mso-width-source:auto;
mso-ruby-visibility:none;}
br
{mso-data-placement:same-cell;}
.style0
{mso-number-format:general;
text-align:general;
vertical-align:bottom;
white-space:nowrap;
mso-rotate:0;
mso-background-source:auto;
mso-pattern:auto;
color:windowtext;
font-size:9.0pt;
font-weight:400;
font-style:normal;
text-decoration:none;
font-family:宋体;
mso-generic-font-family:auto;
mso-font-charset:134;
border:none;
mso-protection:locked visible;
mso-style-name:常规;
mso-style-id:0;}
td
{mso-style-parent:style0;
padding-top:1px;
padding-right:1px;
padding-left:1px;
mso-ignore:padding;
color:windowtext;
font-size:9.0pt;
font-weight:400;
font-style:normal;
text-decoration:none;
font-family:宋体;
mso-generic-font-family:auto;
mso-font-charset:134;
mso-number-format:general;
text-align:general;
vertical-align:bottom;
border:none;
mso-background-source:auto;
mso-pattern:auto;
mso-protection:locked visible;
white-space:nowrap;
mso-rotate:0;}
.xl24
{mso-style-parent:style0;
border:.5pt solid windowtext;}
.xl25
{mso-style-parent:style0;
mso-number-format:"long date";
text-align:left;
border:.5pt solid windowtext;}
ruby
{ruby-align:left;}
rt
{color:windowtext;
font-size:9.0pt;
font-weight:400;
font-style:normal;
text-decoration:none;
font-family:宋体;
mso-generic-font-family:auto;
mso-font-charset:134;
mso-char-type:none;
display:none;}
-->
</style>
<!--[if gte mso 9]><xml>
<x:excel workbook>
<x:excel worksheets>
<x:excel worksheet>
<x:name>sheet1</x:name>
<x:worksheetoptions>
<x:defaultrowheight>225</x:defaultrowheight>
<x:print>
<x:validprinterinfo/>
<x:papersizeindex>9</x:papersizeindex>
<x:horizontalresolution>-3</x:horizontalresolution>
<x:verticalresolution>0</x:verticalresolution>
</x:print>
<x:selected/>
<x:panes>
<x:pane>
<x:number>3</x:number>
<x:activerow>24</x:activerow>
<x:activecol>5</x:activecol>
</x:pane>
</x:panes>
<x:protectcontents>false</x:protectcontents>
<x:protectobjects>false</x:protectobjects>
<x:protectscenarios>false</x:protectscenarios>
</x:worksheetoptions>
</x:excel worksheet>
<x:excel worksheet>
<x:name>sheet2</x:name>
<x:worksheetoptions>
<x:defaultrowheight>225</x:defaultrowheight>
<x:protectcontents>false</x:protectcontents>
<x:protectobjects>false</x:protectobjects>
<x:protectscenarios>false</x:protectscenarios>
</x:worksheetoptions>
</x:excel worksheet>
<x:excel worksheet>
<x:name>sheet3</x:name>
<x:worksheetoptions>
<x:defaultrowheight>225</x:defaultrowheight>
<x:protectcontents>false</x:protectcontents>
<x:protectobjects>false</x:protectobjects>
<x:protectscenarios>false</x:protectscenarios>
</x:worksheetoptions>
</x:excel worksheet>
</x:excel worksheets>
<x:windowheight>6600</x:windowheight>
<x:windowwidth>12000</x:windowwidth>
<x:windowtopx>0</x:windowtopx>
<x:windowtopy>1395</x:windowtopy>
<x:protectstructure>false</x:protectstructure>
<x:protectwindows>false</x:protectwindows>
</x:excel workbook>
</xml><![endif]-->
</head>
<body link=blue vlink=purple>

原文地址:https://www.cnblogs.com/ince/p/9156661.html