繁体   English   中英

从Classic ASP导出数据到excel文件失败

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM