我正在开发一些生成Excel电子表格并在服务器端下载到用户的代码。我正在使用ExcelPackage生成文件。
生成过程很顺利。我可以使用Excel 2007打开生成的文件,没有任何问题。但是,我在使用Response.TransmitFile()
下载文件时遇到了麻烦。
现在,我有以下代码:
//Generate the file using ExcelPackage
string fileName = generateExcelFile(dataList, "MyReportData");
Response.AddHeader("content-disposition", "attachment;filename=FileName.xls");
Response.ContentType = "application/vnd.xls"
Response.Charset = "";
Response.TransmitFile(fileName);
当Excel 2007打开上述下载的文件时,它会发出“文件格式与扩展名不匹配”的警告。 单击警告后,Excel会显示文件的原始XML内容。
如果我更改文件扩展名,就像这样
Response.AddHeader("content-disposition", "attachment;filename=FileName.xlsx");
在Excel 2007中,会出现“Excel在文件中发现不可读内容”的错误,随后会出现一个对话框,询问是否在网上查找转换器。如果我在此对话框上单击“否”,Excel是能够加载数据的。
我还尝试了不同的MIME类型,例如application/vnd.ms-excel
和application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
,结合.xls和.xlsx文件扩展名的各种组合方式。所有组合方式都会导致上述两种行为之一。
在这种情况下,正确的文件扩展名和MIME类型组合方式是什么?除了不正确的MIME类型或扩展名之外,还有什么可能导致这种失败?
顺便说一句,这是在Visual Studio内置的开发Web服务器中发生的。我还没有尝试在IIS中进行此操作。