用vb写的相应的代码知道(在那里有excel进程退不出的问题!)
我是想把数据库相应的纪录提取出来之后生成excel文件给用户下载(可能有多个用户同时使用该程序)。
我试了用vb的代码进行改写,但是很多地方出错!
并且最好能够删除生成的临时文件(有个模板)。
刚才用示例代码运行时出现错误
服务器对象 错误 'ASP 0178 : 80070005'
Server.CreateObject 访问错误
/control/1.asp,行3
检查权限时Server.CreateObject 的调用失败。对此对象的访问被拒。
*****************此为调用excel文件显示出来*****************
Microsoft VBScript 运行时错误 错误 '800a0046'
没有权限: 'createobject'
/control/excel.asp,行3
******************此为把数据库的数据插入到excel时出现的错误*******
各位达人怎么需要怎么设置?
很简单,
在第一句ASP语句上这样写:
Response.ContentType = "Application/vnd.ms-excel"
然后照正常ASP网页编写,则所有的HTML文档被自动的转化成了Excel文档,并通知浏览器使用Excel插件。
这是一个写头命令的小技巧。
用上面的方法好倒好,但有时会出问题,比如:在有的WINDOWS版本下或OFFICE版本下,显示空白、显示不全、乱码、表格线错误等,总之问题多多, 如直接生成一个文件,格式与HTML的相差不大的话,也会出现上述问题。。最终的解决办法有两个,一个是在服务器上有EXCEL的ODBC驱动的话,万事大吉,用SQL的SELECT 语句就能生成EXCEL文件,如没有可以看我发在技术文章区中的关于这个问题的解决方法,有全部代码。不过也要有FSO权限。如没有FSO权限,就要求服务器上有ADO2.5版以上,稍改一下我的代码(主要是写文件时)。
阿余说的没错,不过,如果能够确定客户端比如内部网的情况,我还是推荐使用这种方法,它毕竟是一种趋势,而且IE升级到了5.0之后通常都会正常显示,何况很多人使用了IE6和Office XP。
这种方法的最大好处在于极大程度地减轻了服务器的负担,同时也减轻了程序员的负担
<%
Response.ContentType = "application/vnd.ms-excel"
%>
下面来看一个例子,假设现在有如下形式的数据:
flavor qty_baked qty_eaten qty_sold price
Boston 24 2 10 0.5
Jelly 24 1 12 0.5
Strawberry 36 1 15 0.5
Chocolate 24 2 6 0.75
Maple 12 1 6 0.75
客户要求用EXECL的形式表现出来,并且希望其中能加上其他一些计算汇总
用如下代码:
……
<%
Response.ContentType = "application/vnd.ms-excel"
set conntemp=server.createobject("adodb.connection")
cnpath="DBQ=" & server.mappath("/stevesmith/data/timesheet.mdb")
conntemp.Open "DRIVER={Microsoft Access Driver (*.mdb)}; " & cnpath
set RS=conntemp.execute("select * from donut")
%>
<TABLE BORDER=1>
<TR>
<%
' %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
' % Loop through Fields Names and print out the Field Names
' %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
j = 2 'row counter
For i = 0 to RS.Fields.Count - 1
%>
<TD><B><% = RS(i).Name %></B></TD>
<% Next %>
<TD><B>On Hand (calculated)</B></TD>
<TD><B>Gross (calculated)</B></TD>
</TR>
<%
' %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
' % Loop through rows, displaying each field
' %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Do While Not RS.EOF
%>
<TR>
<% For i = 0 to RS.Fields.Count - 1
%>
<TD VALIGN=TOP><% = RS(i) %></TD>
<% Next %>
<TD>=b<%=j%>-c<%=j%>-d<%=j%></TD>
<TD>=d<%=j%>*e<%=j%></TD>
</TR>
<%
RS.MoveNext
j = j + 1
Loop
' %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
' % Make sure to close the Result Set and the Connection object
' %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
RS.Close
%>
<TR BGCOLOR=RED>
<TD>Totals</TD>
<TD>=SUM(B2:B6)</TD>
<TD>=SUM(C2:C6)</TD>
<TD>=SUM(D2:D6)</TD>
<TD>n/a</TD>
<TD>=SUM(F2:F6)</TD>
<TD>=SUM(G2:G6)</TD>
</TABLE>
|