2

我有一个经典的 asp 网站,其中包括将表数据导出/下载为 excel 文件 (.xls) 的功能。这是通过使用此代码块代替通常的 HTML 标头将用户重定向到新页面来完成的:

sub PutInTopOfXLS(FileName)
    Response.Buffer = TRUE
    Response.CharSet="UTF-8"
    Response.CodePage=65001
    Response.ContentType = "application/vnd.ms-excel"
    Response.AddHeader "Content-Disposition", "attachment;filename=" & FileName%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns:x="urn:schemas-microsoft-com:office:excel">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
        <style>
        <!--table
        br {mso-data-placement:same-cell;}
        tr {vertical-align:top;}
        -->
        </style>
    </head>
    <body>  
<%end sub

这适用于 Firefox、Internet Explorer 和 Safari(适用于 Mac 和 Windows)上的所有用户(或至少没有报告任何问题),并且适用于我使用 Chrome (20.0.1132.57) 的开发机器。但是,我的 QA 人员报告说,在网站上的几个特定报告中,它总是使用实际代码页名称 ReportFileName.asp 在 Chrome 上下载,然后他收到有关 .asp 文件没有文件关联的 Windows 错误。如果他确实选择了用 Excel 打开,则说明已经下载了正确的文件。我让我们办公室的另一个人下载Chrome,她没有问题;文件下载为 {filename}.xls 并正常打开。

我很困惑,因为对于 QA 人员来说,它只影响这一份报告,这表明问题出在特定报告中。但是,其他两个使用相同版本 Chrome 的用户没有遇到此问题,这表明这是他的 Chrome 设置中的问题。

我没有任何运气在谷歌上搜索解决方案或搜索 SO,所以我想我会把问题扔在那里,看看是否有人有任何想法。

非常感谢您的帮助。

4

1 回答 1

0

我建议流式传输文件,这也可以让您以更好的方式处理大文件。

这是我的工作示例,我使用它来获取一些自动 csv 文件,这些文件存储在一个相当不友好的文件名中,我还使用这个脚本向最终用户呈现一个更好的文件名:

' Set some variables
strSourceFilename = "00008446.dat"
strNiceFilename = "Nice Name Here.csv"

' Read the file and stream  it back to the client
Const adTypeBinary = 1
Set BinaryStream = CreateObject("ADODB.Stream")
BinaryStream.Type = adTypeBinary
BinaryStream.Open
BinaryStream.LoadFromFile "C:\path\to\the\folder\" & strSourceFilename
ReadBinaryFile = BinaryStream.Read
Response.ContentType = "application/x-unknown"
Response.AddHeader "Content-Disposition", "attachment; filename=" & strNiceFilename
Response.BinaryWrite ReadBinaryFile

希望这可以帮助!

于 2012-09-10T14:43:05.733 回答