监控安装 ERP

系统集成论坛

 找回密码
 注册通行证

QQ登录

只需一步,快速开始

路由器交换机防火墙系统集成商城 优质产品采购平台
查看: 2925|回复: 2
打印 上一主题 下一主题

excel组件环境配置

  [复制链接]
跳转到指定楼层
1
发表于 2010-8-23 13:35:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
华为金牌代理
在开发一个信息管理系统时遇到需要将数据库里的内容导出到Excel电子表格,刚开始总是报错,原来是服务器没开启FSO和设置Excel组件环境。在网上搜了些资料,试验了几次,终于搞定。

测试环境:windows server 2003+IIS 6.0+OFFICE 2003


第一步:打开服务器FSO权限

1、首先在系统盘中查找scrrun.dll,如果存在这个文件,请跳到第三步,如果没有,请执行第二步。   
2、在安装文件目录i386中找到scrrun.dl_,用winrar解压缩,得scrrun.dll,然后复制到x(你的系统盘):\windows\system32\目录中   
3、运行regsvr32 scrrun.dll即可。   
4、如果想关闭FSO组件,请运行 regsvr32 /u scrrun.dll即可

PS:
1、FSO是FileSystemObject Object的简称,当然也就是我们的俗称FSO组件了,该组件可以用来处理驱动器、文件夹以及文件等。
2、应该说 scrrun.dll 是系统自带的,不用单独运行,有可能是IE的插件将其屏蔽了。所以,这里需要再次运行一下。
4、遇到FSO组件无法创建的问题,如:“你的部分组件无法创建,请打开incconstoption.asp修改G_FS_FSO.的值,然后重新安装”或“语句中的“Scripting.FileSystemObject”对象无法创建”,遇到这两种问题的时候也可以用上面的方法修复。

注意进行以上操作后别忘了重启服务器


第二步:excel组件设置


开始->运行->dcomcnfg (打开组件服务)

在DCOM配置中找到”Microsoft Excel 应用程序”(这个名称取决于你调用的Object是什么),

然后右键->属性->安全 在“启动和激活权限”框中点击“编辑”把三个权限都给everyone(window 2000系统) 即可。其实第一个Launch & activate就行了。

如果是XP系统,找不到Everyone,添加IIS默设用户:IUSER/your user,即:如果找不到该用户可点击“添加”->“高级”,用“立即查找”找到相应的用户。在XP中是在权限选择框中把“本地启动”和“本地激活”允许权限打√。


以上测试可行!
我分享,我成长!系统集成 XTJC.COM
2
 楼主| 发表于 2010-8-23 13:39:26 | 只看该作者
华为金牌代理
ASP导出Excel数据的四种方法

一、使用owc

  什么是owc?

  owc是office web compent的缩写,即microsoft的office web组件,他为在web中绘制图像提供了灵活的同时也是最基本的机制。在一个intranet环境中,如果能假设客户机上存在特定的浏览器和一些功能强大的软件(如ie5和office 2000),那么就有能力利用office web组件提供一个交互式图像研发环境。这种模式下,客户端工作站将在整个任务中分担非常大的比重。



<%option explicit
class excelgen
private objspreadsheet
private icoloffset

private irowoffset
sub class_initialize()
set objspreadsheet = server.createobject("owc.spreadsheet")
irowoffset = 2
icoloffset = 2
end sub

sub class_terminate()
set objspreadsheet = nothing clean up
end sub

public property let columnoffset(icoloff)
if icoloff > 0 then
icoloffset = icoloff
else
icoloffset = 2
end if
end property

public property let rowoffset(irowoff)
if irowoff > 0 then
irowoffset = irowoff
else
irowoffset = 2
end if
end property sub generateworksheet(objrs)
populates the excel worksheet based on a recordsets contents
start by displaying the titles
if objrs.eof then exit sub
dim objfield, icol, irow
icol = icoloffset
irow = irowoffset
for each objfield in objrs.fields
objspreadsheet.cells(irow, icol).value = objfield.name
objspreadsheet.columns(icol).autofitcolumns
设置excel表里的字体
objspreadsheet.cells(irow, icol).font.bold = true
objspreadsheet.cells(irow, icol).font.italic = false
objspreadsheet.cells(irow, icol).font.size = 10
objspreadsheet.cells(irow, icol).halignment = 2 居中
icol = icol + 1
next objfield
display all of the data
do while not objrs.eof
irow = irow + 1
icol = icoloffset
for each objfield in objrs.fields
if isnull(objfield.value) then
objspreadsheet.cells(irow, icol).value = ""
else
objspreadsheet.cells(irow, icol).value = objfield.value
objspreadsheet.columns(icol).autofitcolumns
objspreadsheet.cells(irow, icol).font.bold = false
objspreadsheet.cells(irow, icol).font.italic = false
objspreadsheet.cells(irow, icol).font.size = 10
end if
icol = icol + 1
next objfield
objrs.movenext
loop
end sub function saveworksheet(strfilename)

save the worksheet to a specified filename
on error resume next
call objspreadsheet.activesheet.export(strfilename, 0)
saveworksheet = (err.number = 0)
end function
end class

dim objrs
set objrs = server.createobject("adodb.recordset")
objrs.open "select * from xxxx", "provider=sqloledb.1;persist security

info=true;user id=xxxx;password=xxxx;initial catalog=xxxx;data source=xxxx;"
dim savename
savename = request.cookies("savename")("name")
dim objexcel
dim excelpath
excelpath = "excel\" & savename & ".xls"
set objexcel = new excelgen
objexcel.rowoffset = 1
objexcel.columnoffset = 1
objexcel.generateworksheet(objrs)
if objexcel.saveworksheet(server.mappath(excelpath)) then
response.write "<html><body bgcolor=gainsboro text=#000000>已保存为excel文件.

<a href=" & server.urlencode(excelpath) & ">下载</a>"
else
response.write "在保存过程中有错误!"
end if
set objexcel = nothing
objrs.close
set objrs = nothing
%>



  二、用excel的application组件在客户端导出到excel或word

  注意:两个函数中的“data“是网页中要导出的table的 id

<input type="hidden" name="out_word" onclick="vbscript:builddoc" value="导出到word" class="notprint">
<input type="hidden" name="out_excel" onclick="automateexcel();" value="导出到excel" class="notprint">

  导出到excel代码

<script language="javascript">
<!--
function automateexcel()
{
// start excel and get application object.
var oxl = new activexobject("excel.application");
// get a new workbook.
var owb = oxl.workbooks.add();
var osheet = owb.activesheet;
var table = document.all.data;
var hang = table.rows.length;

var lie = table.rows(0).cells.length;

// add table headers going cell by cell.
for (i=0;i<hang;i++)
{
for (j=0;j<lie;j++)
{
osheet.cells(i+1,j+1).value = table.rows(i).cells(j).innertext;
}

}
oxl.visible = true;
oxl.usercontrol = true;
}
//-->
</script>

  导出到word代码

<script language="vbscript">
sub builddoc
set table = document.all.data
row = table.rows.length
column = table.rows(1).cells.length

set objworddoc = createobject("word.document")

objworddoc.application.documents.add thetemplate, false
objworddoc.application.visible=true

dim thearray(20,10000)
for i=0 to row-1
for j=0 to column-1
thearray(j+1,i+1) = table.rows(i).cells(j).innertext
next
next
objworddoc.application.activedocument.paragraphs.add.range.insertbefore("综合查询结果集") //显示表格标题

objworddoc.application.activedocument.paragraphs.add.range.insertbefore("")
set rngpara = objworddoc.application.activedocument.paragraphs(1).range
with rngpara
.bold = true //将标题设为粗体
.paragraphformat.alignment = 1 //将标题居中
.font.name = "隶书" //设定标题字体
.font.size = 18 //设定标题字体大小
end with
set rngcurrent = objworddoc.application.activedocument.paragraphs(3).range
set tabcurrent = objworddoc.application.activedocument.tables.add(rngcurrent,row,column)

for i = 1 to column

objworddoc.application.activedocument.tables(1).rows(1).cells(i).range.insertafter thearray(i,1)
objworddoc.application.activedocument.tables(1).rows(1).cells(i).range.paragraphformat.alignment=1
next
for i =1 to column
for j = 2 to row
objworddoc.application.activedocument.tables(1).rows(j).cells(i).range.insertafter thearray(i,j)
objworddoc.application.activedocument.tables(1).rows(j).cells(i).range.paragraphformat.alignment=1
next
next

end sub
</script>

  三、直接在ie中打开,再存为excel文件

  把读出的数据用<table>格式,在网页中显示出来,同时,加上下一句即可把excel表在客客户端显示。

<%response.contenttype ="application/vnd.ms-excel"%>

  注意:显示的页面中,只把<table>输出,最佳不要输出其他表格以外的信息。

  四、导出以半角逗号隔开的csv

  用fso方法生成文本文件的方法,生成一个扩展名为csv文件。此文件,一行即为数据表的一行。生成数据表字段用半角逗号隔开。(有关fso生成文本文件的方法,在此就不做介绍了)

  csv文件介绍 (逗号分隔文件)

  选择该项系统将创建一个可供下载的csv 文件; csv是最通用的一种文件格式,他能非常容易地被导入各种pc表格及数据库中。

  请注意即使选择表格作为输出格式,仍然能将结果下载csv文件。在表格输出屏幕的底部,显示有 "csv 文件"选项,点击他即可下载该文件。

  如果你把浏览器设置为将你的电子表格软件和文本(txt)/逗号分隔文件(csv) 相关联,当你下载该文件时,该文件将自动打开。下载下来后,如果本地已安装excel,点击此文件,即可自动用excel软件打开此文件。
我分享,我成长!系统集成 XTJC.COM

35

主题

552

帖子

963

积分

正式员工

3
发表于 2010-9-8 18:23:07 | 只看该作者
华为金牌代理
他们说这样的帖子得顶!
您需要登录后才可以回帖 登录 | 注册通行证

本版积分规则

联系我们| 手机版|系统集成论坛 ( 京ICP备11008917号 )

GMT+8, 2024-11-29 13:43 , Processed in 0.065926 second(s), 24 queries .

系统集成论坛

BBS.XTJC.COM

快速回复 返回顶部 返回列表