从传统的ASP导出数据到excel文件失败

问题描述:

我试图导出一个记录集到Excel中,但它似乎在生产服务器上保持失败。但是,它似乎在我的开发工作站上工作得很好。我想知道我适合的服务器相关的问题,但我有其他的应用程序,可以使用相同的确切代码,良好的类似代码相同的设置导出很好。从传统的ASP导出数据到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 我固定在EOF问题与不正确的列名(哎呀!),它现在可以正确下载从生产我的电脑上。我有Office 2007,但至少还有一台电脑不能下载。这台其他电脑上有Office 2000。但是删除标题并允许它在所有机器上工作的HTML都可以使用。

Office 2000可能会遇到这种问题吗?

+1

它显示任何记录(在生产中),如果您删除contenttype和处置相关的标头? – shahkalpesh 2009-07-28 20:04:22

+0

在浏览器上的页面上查看源代码,并在此处发帖,了解它的内容。 – shahkalpesh 2009-07-28 21:27:34

首先是几件管家用品。

对于Content-Type 3次设置没什么意义。只要坚持用'应用程序\ vnd.ms-EXCEL”之一。

而不是使用‘ANSI’作为字符集的‘Windows 1252’。

多大输出?既然你是缓冲。你可能会击中ASP缓存默认最大IIS6的4MB的

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

编辑

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

你安装了什么版本的MS Office?

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

...这是服务器上的区域设置非常敏感:当我看到

+0

有一些相当大的文件的机会,但我会推测没有比1或2 MB更大的东西。我还用不同的字符集更新了它,并删除了不需要的内容类型。虽然仍然是一个问题。 – 2009-07-28 20:29:24

在我的脖子出来的毛发上升。它可能是一台服务器有美国日期格式,另一台服务器有不同的日期格式?

如果出错了,最终可能会导致无效的文件名。

如果您的输出仅用于导出(指向excel),则不需要放置HTML和BODY标签。你可以放心只写<table>...</table>

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

Response.Buffer = False