导出excel,Server.CreateObject 失败

ssh78 2009-12-02 10:38:38
一个表单,输入内容很多。要将输入的数据(注意:不是查询出的数据,是输入的)导出到excel中,我用了以下方法:
Set ExcelApp=server.CreateObject("Excel.Application")
ExcelApp.Application.Visible = True
。。。。。。
ExcelApp.Quit
set ExcelApp=Nothing
并且为了解决Server.CreateObject 失败,在本机按照这个帖子(http://purplejasmine0.blog.sohu.com/112617299.html)的方法设置了组件服务,本地在本机(windows xp+iis5.1+ie6)上成功导出excel
但是在将程序转移到另一台作为服务器的机子上(windows server2003+iis6.0+ie6),并且同样设置了组件服务后,在本机访问程序导出excel时,出现错误Server.CreateObject 失败。

真郁闷呀,怎么回事呀,怎么解决呀?请大家告诉我吧
...全文
433 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
ssh78 2009-12-03
  • 打赏
  • 举报
回复
不行,对于我的表格,只生成了表头和最后一行合计,而且没有任何数值
wlcsdf 2009-12-03
  • 打赏
  • 举报
回复
重新安装你的EXCEL.

下面的代码没有 server.CreateObject,是最原始的代码.你拿去在你的机子上试下.

<%
if request.querystring("action")="toExcel" then
Response.ContentType="application/vnd.ms-excel"
Response.AddHeader "content-disposition","attachment;filename=aaa.xls"
end if
%>

<html>
<body>
<table border="1" cellpadding="0" cellspacing="0">
<tr>
<td> <strong>职务 </strong> </td>
<td> 职级 </td>
<td height="300" width="300"> <img src="http://localhost/images/031.png"/> 这个地方一定要用全路径 </td>
</tr>
</table>
<input type="button" name="out_excel" onClick="location.href='?action=toExcel'" value="导出到excel">


</body>
</html>
ssh78 2009-12-03
  • 打赏
  • 举报
回复
已经设了everyone和iis来宾账户
_老吴 2009-12-03
  • 打赏
  • 举报
回复
在服务器上的权限里的用户要有写入权限的,你先设置Everyone有写入权限,如果可以,你再单设权限!
ssh78 2009-12-03
  • 打赏
  • 举报
回复
wlcsdf,你的方法里都有这句server.CreateObject(),如果我的那句出错,同样的,你的这些方法都要出错的呀,而且配置权限的方法大同小异,本质上和我那句没有什么区别呀。
你那个javascript总是报“导出Excel表失败或您取消了操作”
ssh78 2009-12-03
  • 打赏
  • 举报
回复
权限和ie都设置了,还是不行。
ssh78 2009-12-03
  • 打赏
  • 举报
回复
呵呵,我终于放弃了我的想法。变通的实现了。
<input name="cmdb" type="button" value="导出到excel" onclick="submitexcel()" />
function submitexcel()
{
document.appform.action="app_mx_excel.asp";
window.open("about:blank","excelwindow","left =130,top=300,width=1000,height=400, toolbar=no,menubar=no,scrollbars=yes, resizable=yes");
appform.target = "excelwindow";
document.appform.submit();

}

然后在app_mx_excel.asp里用request()得到这些数据,然后显示出来,在app_mx_excel.asp第一句加了<%response.ContentType ="application/vnd.ms-excel"%>

wlcsdf谢谢你了
wlcsdf 2009-12-02
  • 打赏
  • 举报
回复
这个是生成电子表格的

<!--#include file="../db.asp" -->
<html>
<head>
<title>从数据库生成电子表格文档</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>

<body bgcolor="#FFFFFF" text="#000000">


注意:本生成系统使用office自带的owc组件,服务器上必须安装office
<%
'选出记录集
dim rs,sql
set rs=server.createobject("adodb.recordset")
sql="select * from b_hn_sgbb"
rs.open sql,cn,1,3

dim rstCount,rstField
rstCount=rs.recordcount'记录行数
rstField=rs.fields.count'记录列数


dim oExcel,sCellValue,Path
Set oExcel = Server.CreateObject("OWC.Spreadsheet")

dim Line,Column
Line=1

'写入列名
For Column=0 to rstField-1
sCellValue=rs.fields(Column).name'列名
sCellValue=sCellValue&""
oExcel.Cells(Line,Column+1)= sCellValue '第一行的第几列,列是循环的,行不变。
Next

'写入记录,从第二行开始先行后列的写入表中
For Line=2 to rstcount+1
For Column=0 to rstField-1
sCellValue=rs.fields(Column)
sCellValue=sCellValue&""
oExcel.Cells(Line,Column+1)= sCellValue
Next
rs.movenext
Next
'这行不知道干什么
For Column = 1 to rstField
oExcel.Columns(Column).AutoFitColumns
Next

'设置Excel表里的字体
Column = 1
Do While Column <= rstField
oExcel.Cells(1, Column).Font.Bold = True
oExcel.Cells(1, Column).Font.Italic = False
oExcel.Cells(1, Column).Font.Size = 16
Column = Column + 1
Loop

'输出该表
Path=Server.MapPath("Caseinfo.xls")
oExcel.ActiveSheet.Export Path, 0
%>

<br>
<a href="Caseinfo.xls" target=_blank>查看生成的电子表格</a>
<br>

</body>
</html>
wlcsdf 2009-12-02
  • 打赏
  • 举报
回复
这个也是读取电子表格的

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb_2312-80">
<meta name="GENERATOR" content="Microsoft FrontPage Express 2.0">
<title>运用普通的数据库链接读取EXCEL文件内容</title>
</head>
<body bgcolor="#FFFFFF" >
<h2 align="center">运用普通的数据库链接读取EXCEL文件内容</h2>
<CENTER>
<TABLE border="0" style="font-size: 10pt" style="border: 2 groove #000000">
<%
'创建数据库链接,注意这下面的[sheet1$]为实际表中的名字,如果原表名不是起这样的名字的话将引起出错
set cn=server.createobject("adodb.connection")
stropen="driver={microsoft excel driver (*.xls)}; dbq="& server.mappath("book1.xls")
cn.open stropen
Set rs=Server.CreateObject("ADODB.Recordset")
rs.Open "Select * From [sheet1$]", cn, 2, 2

Response.Write "<TR BGCOLOR=#008000><TD width=100>0</TD>"
For i=0 to rs.Fields.Count-1
Response.WRITE "<TD width=100>" & rs.Fields(i).Name & "</TD>"
Next
Response.Write "</TR>"
RecNo=1
Do While Not rs.EOF
Response.Write "<TR bgColor=#e6e6e6>"
Response.Write"<TD width=100>"&RecNo&"</TD>"
for i=0 to rs.fields.count-1
Response.Write"<TD width=100>"&rs.Fields(i).Value&"</TD>"
Next
Response.Write "</TR>"
rs.MoveNext
RecNo=RecNo+1
Loop
rs.close
%>
</TABLE>
</CENTER>
</body>
</html>
wlcsdf 2009-12-02
  • 打赏
  • 举报
回复
以下为读取电子表格

<%@language=vbscript %>
<%
'把电子表格直接读到网页中
Set xlApp = server.CreateObject("Excel.Application")

strsource = "e:\aqjcsj\b_sgbb\sjzh\hn_xls1.xls"

Set xlbook = xlApp.Workbooks.Open(strsource)
Set xlsheet = xlbook.Worksheets(2)

i=1
response.write "<table cellpadding=0 cellspacing=0 border=1 width=500>"
while xlsheet.cells(i,1)<>""

response.write "<tr>"
response.write " <td height=20 align=center width=100>" & xlsheet.Cells(i, 1) & "</td>"
response.write " <td height=20 align=center width=200>" & xlsheet.Cells(i, 2) & "</td>"
response.write " <td height=20 align=center width=200>" & xlsheet.Cells(i, 3) & "</td>"
response.write "</tr>"
i=i+1
'if i>100 then exit do
wend
response.write "</table>"
set xlsheet=nothing
set xlbook=nothing
xlApp.quit '千万记住要加这一句,否则每运行一次你的机器里就增加一个excel进程,而且无法释放。我试过"
set xlApp=nothing'是不行的。
%>
ssh78 2009-12-02
  • 打赏
  • 举报
回复
server 2003难道不支持么?
ssh78 2009-12-02
  • 打赏
  • 举报
回复
不够分再加,大家帮帮忙
yan11cn 2009-12-02
  • 打赏
  • 举报
回复
不懂 帮顶
wlcsdf 2009-12-02
  • 打赏
  • 举报
回复
或者干脆换一段代码.下面这段简洁好用.

<script language= "javascript ">
function exportExcel(atblData)
{
if (typeof(EXPORT_OBJECT)!= "object ")
{
document.body.insertAdjacentHTML( "afterBegin ", " <OBJECT

style= 'display:none ' classid=clsid:0002E510-0000-0000-C000-000000000046

id=EXPORT_OBJECT> </Object> ");
}
with (EXPORT_OBJECT){
DataType = "HTMLData ";
HTMLData =atblData.outerHTML;
try{
ActiveSheet.Export( "C:\\sortTEL.xls ",0);
alert( '导出EXCEL文档完毕 ');
}
catch (e)
{
alert( '导出Excel表失败或您取消了操作! ');
}
}
}
</script>
<table id= "tblData " border= "1 ">
<tr>
<td> A </td>
<td> B </td>
<td> C </td>
<td> D </td>
</tr>
</table>
<center> <input type= "button " value= "导出以上数据为Excel文档 "

onclick= "exportExcel(tblData) "> </center>
wlcsdf 2009-12-02
  • 打赏
  • 举报
回复
你非要用这一句吗?这句代码既然在你的机子上出问题,你怎么保证在别的机子上不出问题?
换这句,什么问题都没有.
<%response.contentType="application/vnd.ms-excel"%>
ninja 2009-12-02
  • 打赏
  • 举报
回复
应该是IE限制了:
修改:IE属性--internet选项--安全--自定义级别--启用"对为标记为安全的可执行脚本的ActiveX控件初始化并执行"
gingerkang 2009-12-02
  • 打赏
  • 举报
回复
估计是权限问题,我的机器是2003,测试了一下,在那个dcomcnfg配置中,配置那个启动和激活的权限,同时把标识改成"启动用户"就可以了,差别和原因不明,:)
ssh78 2009-12-02
  • 打赏
  • 举报
回复
wlcsdf,你很热心,给我贴了很多代码,但是如果那个CreateObject("Excel.Application")错误无法解决,你的那些方法都是无法实现的,都会报同样的错的。所以,我问的不是怎样输出excel的问题,而是CreateObject("Excel.Application")错误问题呀
_老吴 2009-12-02
  • 打赏
  • 举报
回复
可以去看看http://blog.csdn.net/wuzhengqing1/archive/2009/12/02/4921892.aspx
wlcsdf 2009-12-02
  • 打赏
  • 举报
回复
这个也行

<title> 查询导出 </title>
<link href= "../css.css " rel= "stylesheet " type= "text/css " />
<!--#include file= "../inc/conn.asp "-->
<%

dim s,sql,filename,fs,myfile,x

Set fs = server.CreateObject( "scripting.filesystemobject ")
'--假设你想让生成的EXCEL文件做如下的存放
filename = Server.MapPath( "易耗品分类一览表.xls ")
'--如果原来的EXCEL文件存在的话删除它
if fs.FileExists(filename) then
fs.DeleteFile(filename)
end if
'--创建EXCEL文件
set myfile = fs.CreateTextFile(filename,true)
dim trLine,responsestr

strLine = "易耗品编号 " & chr(9) & "易耗名称 " & chr(9) & "阈值 " & chr(9) & "库存 " & chr(9) & "库存金额 "
'--将表的列名先写入EXCEL
myfile.writeline strLine
Set rs = Server.CreateObject( "ADODB.Recordset ")
'--从数据库中把你想放到EXCEL中的数据查出来

idd=request( "id ")
yhse=right(idd,3)
yhfi=left(idd,3)
if yhse= " " then
strsql= "select * from yhid order by yhid asc "
else
strsql= "select * from yhid where yhsecondid= ' "& yhse & " ' and yhfirstid= ' "& yhfi & " ' order by yhid asc "
end if
Set rstData =conn.execute(strSql)
if not rstData.EOF and not rstData.BOF then
Do while Not rstData.EOF

yhname=rstData( "yhname ")
yhid=rstData( "yhfirstid ")&rstData( "yhsecondid ")&rstData( "yhid ")
guoji=rstData( "guoji ")

set rs4 = server.createobject( "adodb.recordset ")
rs4.open "select sum(yhsl),sum(yhmoney) from yhlb where right(yhpianhao,3)= ' " & rstData( "yhid ") & " ' ",conn,1,1

yhkq=rs4(0)
yhmn=rs4(1)
rs4.close
set rs4=nothing
strLine= " "
strLine = " "& yhid & " " & chr(9) & " "& yhname & " " & chr(9) & " "& guoji & " " & chr(9) & " "& yhkq & " " & chr(9) & " "& yhmn & " "
myfile.writeline strLine


rstData.MoveNext
loop

end if
rstData.Close
set rstData = nothing
Conn.Close
Set Conn = nothing
%>
<table width= "400 " height= "100 " border= "0 " align= "center " cellpadding= "0 " cellspacing= "0 ">
<tr>
<td> <div align= "center "> 已成功导出 </div> </td>
</tr>
<tr>
<td> <div align= "center "> 点击 <a href= "易耗品分类一览表.xls "> 这里 </a> 下载 </div> </td>
</tr>
</table>

加载更多回复(3)

28,406

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧