我正在尝试将记录集导出到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无法打开 这个互联网网站。请求的网站 要么不可用,要么不能 找到。请稍后再试。
除了错误之外还有什么方法可以导出它而不是显示为带有白色背景且没有行的HTML,就像真正的Excel文件一样?
修改: 内容类型已根据Anthony的回答进行了更正。
日期不是硬编码的,只允许每天创建多个文件而无需任何用户干预(用户请求)。
我已更新删除If Not EOF。我一直注意到很多长时间连接,也许应用程序周围有很多类型的问题。谢谢你的提示。它仍然可以工作desipte没有按要求的记录集。
编辑2 我已经修复了一个不正确的列名称问题(oops!),它现在可以在我的计算机上从生产中正确下载。我有Office 2007.但事情仍然不会在至少一台其他计算机上下载。这台其他计算机上有Office 2000。但是删除标题并允许它将所有机器上的HTML分解为jsut。
Office 2000可能存在这类问题吗?
答案 0 :(得分:1)
首先是几个家务。
设置Content-Type 3次没什么意义。只需坚持使用`application \ vnd.ms-excel'即可。
而不是使用“ANSI”作为字符集使用“Windows-1252”。
输出有多大?由于你正在缓冲,你可能会达到ASP缓冲区默认最大4MB的IIS6。
关闭缓冲或弹出元数据库编辑器并增加应用程序的AspBufferingLimit值。
修改强>:
我要尝试的下一件事是在我的客户端安装Fiddler并尝试下载。当你试图下载文件时,你在小提琴手中看到了什么?
您安装了哪个版本的MS Office?
答案 1 :(得分:0)
当我看到时,脖子后面的毛发上升了:
today = "_" + Replace(Date,"/","") + "_" + Replace(Time(),":", "")
...对服务器上的区域设置非常敏感。可能是一台服务器具有美国日期格式,而另一台服务器具有不同的日期格式?
如果出错,最终可能会出现无效的文件名。
答案 2 :(得分:0)
如果您的输出仅指定用于导出(excel),则无需放置HTML和BODY标记。您可以安全地只编写<table>...</table>
。
答案 3 :(得分:0)
使用以下代码禁用代码中的缓冲。
Response.Buffer = False