• 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>

  • 相关阅读:
    概率论与数理统计(3)
    平衡二叉树(AVL)实现(3)删除
    平衡二叉树(AVL)实现(1)
    利用C#2005实现数据表的基本操作
    用js计算时间差,得到比较人性化的结果
    WinForm 窗口最小化到托盘 notifyIcon
    wget 使用技巧
    使用javascript从url获取参数值
    OWC做电子表格和图表的试验
    C#中combobox 和TreeView控件属性、事件、方法收集
  • 原文地址:https://www.cnblogs.com/ince/p/9156661.html
Copyright © 2020-2023  润新知