3

我正在尝试将记录集导出到 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 文件一样?

编辑:已根据安东尼的回答更正了内容类型。

该日期没有硬编码以允许每天创建多个文件而无需任何用户干预(用户请求)。

我已更新以删除 If Not EOF。我注意到很多长时间运行的连接,也许应用程序周围存在许多此类问题。谢谢你的提示。而且它仍然可以工作,因为没有按照要求的记录集。

编辑 2 我已经解决了列名不正确的问题(哎呀!),现在它可以从生产中正确下载到我的计算机上。我有 Office 2007。但它仍然无法在至少另一台计算机上下载。这台计算机上装有 Office 2000。但是删除标题并允许它溢出它在所有机器上工作的 HTML。

Office 2000 可能对这类事情有问题吗?

4

4 回答 4

2

首先是一些看家的东西。

设置 Content-Type 3 次没有什么意义。只需坚持使用“application\vnd.ms-excel”即可。

而不是使用“ANSI”作为字符集使用“Windows-1252”。

输出有多大?由于您正在缓冲,您可能会达到 IIS6 的 ASP 缓冲区默认最大值 4MB。

关闭缓冲或弹出元数据库编辑器并增加应用程序的 AspBufferingLimit 值。

编辑

我要尝试的下一件事是在我的客户端上安装Fiddler并尝试下载。当您尝试下载文件时,您在 fiddler 中看到了什么?

你安装的是什么版本的微软办公软件?

于 2009-07-28T20:07:33.157 回答
1

当我看到:

 today = "_" + Replace(Date,"/","") + "_" + Replace(Time(),":", "")

...这对服务器上的区域设置非常敏感。可能是一台服务器具有美国日期格式,而另一台具有不同的日期格式?

如果出现问题,您最终可能会得到一个无效的文件名。

于 2009-07-28T20:09:55.943 回答
0

如果您的输出仅指定用于导出(到 excel),则无需放置 HTML 和 BODY 标记。您可以安全地只编写<table>...</table>.

于 2009-08-26T06:37:59.273 回答
0

只需使用以下代码禁用代码中的缓冲。

Response.Buffer = False
于 2010-07-12T05:33:53.167 回答