[英]Classic asp code to export data from Access database to an Excel sheet
[英]Export data to excel file from Classic ASP failing
我正在尝试将记录集导出到Excel中,但它似乎一直在生产服务器上失败。 但是,它似乎在我的开发工作站上工作得很好。 我想知道我适合与服务器相关的问题,但我有其他应用程序可以使用相同的确切代码导出很好,类似的代码设置相同。
<%@ Language=VBScript %>
<%Response.expires = -1%>
<%response.buffer = true%>
<%
Dim today
today = "_" + Replace(Date,"/","") + "_" + Replace(Time(),":", "")
Response.Charset = "ANSI"
Response.ContentType = "application/octet-stream"
Response.ContentType = "application/vnd.ms-excel"
Response.AddHeader "Content-Disposition", "attachment; filename=List" + today + ".xls"
Response.ContentType = "application/download"
set Cnn = server.CreateObject("ADODB.connection")
Cnn.ConnectionString = Application("Cnn_ConnectionString")
Cnn.open
set rs1 = server.CreateObject("ADODB.Recordset")
SQLCollections = "Sp_MysProc @Param1=" & Session("var1")
rs1.open SQLCollections,cnn
%>
<html>
<body>
<table>
<tr>
<td>Number</td>
<td>Name</td>
</tr>
<%if not rs.eof then
do while not rs.eof %>
<tr>
<td><%=rs("Number") %></td>
<td><%=rs("Name") %></td>
</tr>
<%
rs.MoveNext
Loop
rs.Close
set rs = Nothing
End if
%>
</table>
</body>
</html>
再一次,这可以从我的机器上运行。 但是,当我从生产中做到这一点时,它给了我以下信息:
Internet Explorer无法从www.mydomain.com下载MyFile.asp
Internet Explorer无法打开此Internet站点。 请求的网站不可用或无法找到。 请稍后再试。
超出错误是有任何方法使其导出,而不是显示为具有白色背景和没有行的HTML,即像真正的Excel文件一样?
编辑 :内容类型已根据Anthony的答案进行了更正。
日期不是硬编码的,以允许每天创建多个文件而无需任何用户干预(用户请求)。
我已更新删除If Not EOF。 我一直注意到很多长时间连接,也许应用程序周围有很多类型的问题。 谢谢你的提示。 它仍然可以工作desipte没有按要求的记录集。
编辑2我已经修复了一个不正确的列名称问题(哎呀!),它现在可以在我的计算机上从生产中正确下载。 我有Office 2007.但事情仍然不会在至少一台其他计算机上下载。 这台其他计算机上有Office 2000。 但是删除标题并允许它将所有机器上的HTML分解为jsut。
可能Office 2000有这样的问题吗?
首先是几个房子保管。
Content-Type设置3次没什么意义。 只需坚持使用`application \\ vnd.ms-excel'即可。
而不是使用“ANSI”作为字符集使用“Windows-1252”。
产量有多大? 由于您正在缓冲,您可能会达到ASP缓冲区默认最大4MB的IIS6。
关闭缓冲或弹出元数据库编辑器并增加应用程序的AspBufferingLimit值。
编辑 :
我要尝试的下一件事是在我的客户端上安装Fiddler并尝试下载。 当您尝试下载文件时,您在小提琴手中看到了什么?
你安装了什么版本的MS office?
当我看到时,脖子后面的毛发上升了:
today = "_" + Replace(Date,"/","") + "_" + Replace(Time(),":", "")
...对服务器上的区域设置非常敏感。 可能是一台服务器具有美国日期格式,而另一台服务器具有不同的日期格式?
如果出错,最终可能会出现无效的文件名。
如果您的输出仅被指定用于导出(excel),则无需放置HTML和BODY标记。 您可以安全地只写<table>...</table>
。
只需使用以下代码禁用代码中的缓冲即可。
Response.Buffer = False
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.