ASP操作Excel技术总结.docx
《ASP操作Excel技术总结.docx》由会员分享,可在线阅读,更多相关《ASP操作Excel技术总结.docx(52页珍藏版)》请在冰豆网上搜索。
ASP操作Excel技术总结
ASP操作Excel技术总结
目录
一、 环境配置
二、 ASP对Excel的基本操作
三、 ASP操作Excel生成数据表
四、 ASP操作Excel生成Chart图
五、 服务器端Excel文件浏览、下载、删除方案
六、 附录
正文
一、 环境配置
服务器端的环境配置从参考资料上看,微软系列的配置应该都行,即:
1.Win9x+PWS+Office
2.Win2000Professional+PWS+Office
3.Win2000Server+IIS+Office
目前笔者测试成功的环境是后二者。
Office的版本没有特殊要求,考虑到客户机配置的不确定性和下兼容特性,建议服务器端Office版本不要太高,以防止客户机下载后无法正确显示。
服务器端环境配置还有两个偶然的发现是:
1. 笔者开发机器上原来装有金山的WPS2002,结果Excel对象创建始终出现问题,卸载WPS2002后,错误消失。
2. 笔者开发ASP代码喜欢用FrontPage,结果发现如果FrontPage打开(服务器端),对象创建出现不稳定现象,时而成功时而不成功。
扩展考察后发现,Office系列的软件如果在服务器端运行,则Excel对象的创建很难成功。
服务器端还必须要设置的一点是COM组件的操作权限。
在命令行键入“DCOMCNFG”,则进入COM组件配置界面,选择MicrosoftExcel后点击属性按钮,将三个单选项一律选择自定义,编辑中将Everyone加入所有权限。
保存完毕后重新启动服务器。
客户端的环境配置没发现什么特别讲究的地方,只要装有Office和IE即可,版本通用的好象都可以。
二、 ASP对Excel的基本操作
1、 建立Excel对象
setobjExcelApp=CreateObject("Excel.Application")
objExcelApp.DisplayAlerts=false 不显示警告
objExcelApp.Application.Visible=false 不显示界面
2、 新建Excel文件
objExcelApp.WorkBooks.add
setobjExcelBook=objExcelApp.ActiveWorkBook
setobjExcelSheets=objExcelBook.Worksheets
setobjExcelSheet=objExcelBook.Sheets
(1)
3、 读取已有Excel文件
strAddr=Server.MapPath(".")
objExcelApp.WorkBooks.Open(strAddr&"\Templet\Table.xls")
setobjExcelBook=objExcelApp.ActiveWorkBook
setobjExcelSheets=objExcelBook.Worksheets
setobjExcelSheet=objExcelBook.Sheets
(1)
4、 另存Excel文件
objExcelBook.SaveAsstrAddr&"\Temp\Table.xls"
5、 保存Excel文件
objExcelBook.Save (笔者测试时保存成功,页面报错。
)
6、 退出Excel操作
objExcelApp.Quit 一定要退出
setobjExcelApp=Nothing
三、 ASP操作Excel生成数据表
1、 在一个范围内插入数据
objExcelSheet.Range("B3:
k3").Value=Array("67","87","5","9","7","45","45","54","54","10")
2、 在一个单元格内插入数据
objExcelSheet.Cells(3,1).Value="InternetExplorer"
3、 选中一个范围
4、 单元格左边画粗线条
5、 单元格右边画粗线条
6、 单元格上边画粗线条
7、 单元格下边画粗线条
8、 单元格设定背景色
9、 合并单元格
10、 插入行
11、 插入列
四、 ASP操作Excel生成Chart图
1、 创建Chart图
objExcelApp.Charts.Add
2、 设定Chart图种类
objExcelApp.ActiveChart.ChartType=97
注:
二维折线图,4;二维饼图,5;二维柱形图,51
3、 设定Chart图标题
objExcelApp.ActiveChart.HasTitle=True
objExcelApp.ActiveChart.ChartTitle.Text="AtestChart"
4、 通过表格数据设定图形
objExcelApp.ActiveChart.SetSourceDataobjExcelSheet.Range("A1:
k5"),1
5、 直接设定图形数据(推荐)
objExcelApp.ActiveChart.SeriesCollection.NewSeries
objExcelApp.ActiveChart.SeriesCollection
(1).Name="=""333"""
objExcelApp.ActiveChart.SeriesCollection
(1).Values="="
6、 绑定Chart图
objExcelApp.ActiveChart.Location1
7、 显示数据表
objExcelApp.ActiveChart.HasDataTable=True
8、 显示图例
objExcelApp.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代码目录\Templet模板目录\Temp暂存目录
六、 附录
出错时Excel出现的死进程出现是一件很头疼的事情。
在每个文件前加上“OnErrorResumeNext”将有助于改善这种情况,因为它会不管文件是否产生错误都坚持执行到“Application.Quit”,保证每次程序执行完不留下死进程。
postedon2005-03-0817:
07爬行的E.T阅读(6)评论
(1) 编辑收藏
评论
#re:
ASP操作Excel技术总结
这个程序一共由三个文件构成,第一个文件的文件名为:
toexcel.asp是主文件,内容如下:
<%
'前面是和来链接到数据库,请自行书写相关语句,此处略过
sql="select*from[tx_use]"'这里是要输出EXCEL的查询语句,如"SESECT*FORMCAIWHERE性别='女'"
filename="excel.xls"'要输出的EXCEL文件的文件名,你只要改以上两句就行了,其它的都不要改.
'你只要修改以上两变量就行了.其它的我都做好了.
calltoexcel(FILENAME,sql)
setconn=nothing
functionReadText(FileName)'这是一个用于读出文件的函数
setadf=server.CreateObject("Adodb.Stream")
withadf
.Type=2
.LineSeparator=10
.Open
.LoadFromFile(server.MapPath(FileName))
.Charset="GB2312"
.Position=2
ReadText=.ReadText
.Cancel()
.Close()
endwith
setads=nothing
endfunction
subSaveText(FileName,Data)'这是一个用于写文件的函数
setfs=createobject("scripting.filesystemobject")
setts=fs.createtextfile(server.MapPath(FileName),true)
ts.writeline(data)
ts.close
setts=nothing
setfs=nothing
endsub
subtoexcel(filename,sql)'这是一个根据SQL语句和FILENAME生成EXCEL文件
Setrs=Server.CreateObject("ADODB.RecordSet")
rs.Opensql,conn,1,3
TOEXCELLR=""setmyfield=rs.fields
dimfieldname(50)
fori=0tomyfield.count-1
toexcellr=toexcellr&""&MYFIELD(I).NAME&""
fieldname(i)=myfield(i).name
ifmyfield(i).type=135thendatename=datename&myfield(i).name&","
next
toexcellr=toexcellr&"
"
dowhilenotrs.eof
toexcellr=toexcellr&"
"fori=0tomyfield.count-1
ifinstr(datename,fieldname(i)&",")<>0then
ifnotisnull(rs(fieldname(i)))then
TOEXCELLR=TOEXCELLR&""&formatdatetime(rs(fieldname(i)),2)&"
"else
TOEXCELLR=TOEXCELLR&"
"endif
else
TOEXCELLR=TOEXCELLR&""&rs(fieldname(i))&""
endif
next
toexcellr=toexcellr&"
"
rs.movenext
loop
toexcellr=toexcellr&""
tou=readtext("tou.txt")
di=readtext("di.txt")
toexcellr=tou&toexcellr&di
callsavetext(filename,toexcellr)
endsub
%>
">
正在生成EXLCE文件正在生成EXLCE文件....
**************第二个文件名为:
di.txt内容如下:
strborder=0cellpadding=0cellspacing=0width=288style='border-collapse:
collapse;table-layout:
fixed;width:
216pt'>
[ifsupportMisalignedColumns]>
none'>
54pt'>
54pt'>
54pt'>
54pt'>
[endif]>
************第三个文件的文件名为:
tou.TXT 内容如下:
o="urn:
schemas-microsoft-com:
office:
office"
xmlns:
x="urn:
schemas-microsoft-com:
office:
excel"
xmlns="http:
//www.w3.org/TR/REC-html40">
--[ifgtemso9]>
xky
xky
2002-05-27T17:
51:
00Z
2002-06-22T10:
03:
03Z
zydn
9.2812
///E:
/msowc.cab"/>
[endif]-->
--table
{mso-displayed-decimal-separator:
"\.";
mso-displayed-thousand-separator:
"\,";}
@page
{margin:
1.0in.75in1.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:
lockedvisible;
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:
lockedvisible;
white-space:
nowrap;
mso-rotate:
0;}
.xl24
{mso-style-parent:
style0;
border:
.5ptsolidwindowtext;}
.xl25
{mso-style-parent:
style0;
mso-number-format:
"LongDate";
text-align:
left;
border:
.5ptsolidwindowtext;}
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;}
-->
--[ifgtemso9]>
ExcelWorkbook>
ExcelWorksheets>
ExcelWorksheet>
Name>Sheet1
Name>
WorksheetOptions>
DefaultRowHeight>225
DefaultRowHeight>
Print>
ValidPrinterInfo/>
PaperSizeIndex>9
PaperSizeIndex>
HorizontalResolution>-3
HorizontalResolution>
VerticalResolution>0
VerticalResolution>
Print>
Selected/>
Panes>
Pane>
Number>3
Number>
ActiveRow>24
ActiveRow>
ActiveCol>5
ActiveCol>
Pane>
Panes>
ProtectContents>False
ProtectContents>
ProtectObjects>False
ProtectObjects>
ProtectScenarios>False
ProtectScenarios>
WorksheetOptions>
ExcelWorksheet>
ExcelWorksheet>
Name>Sheet2
Name>
WorksheetOptions>
DefaultRowHeight>225
DefaultRowHeight>
ProtectContents>False
ProtectContents>
ProtectObjects>False
ProtectObjects>
ProtectScenarios>False
ProtectScenarios>
WorksheetOptions>
ExcelWorksheet>
ExcelWorksheet>
Name>Sheet3
Name>
WorksheetOptions>
DefaultRowHeight>225
DefaultRowHeight>