从ASPX页面创build和下载Excel文件

我需要创build和excel文件,并从aspx页面下载。 我创build了一个简单的页面(default.aspx),上面有一个button(“Button1”)。 这是default.aspx.cs文件

using System; public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { } protected void Button1_Click(object sender, EventArgs e) { string content = ""; content += "<head>"; content += "</head>"; content += "<body>"; content += "<table>"; content += "<tr>"; content += "<th>foo</th>"; content += "</tr>"; content += "</table>"; content += "</body>"; content += "</html>"; Response.AppendHeader("Content-Type", "application/vnd.ms-excel"); Response.AppendHeader("Content-disposition", "attachment; filename=test.xls"); Response.Write(content); } } 

当我运行这个代码并点击button时,它实际上会生成Excel文件,并在单元格A1中使用testing“foo”。 问题是,我从IE获得以下错误信息:

错误信息显示由Excel

我究竟做错了什么? 我如何生成文件,以便它不会导致显示错误消息?

HTML不是Excel工作簿。

当Excel打开一个文件时,它不会考虑或不信任文件扩展名,因为它可以由用户任意更改 – 而是打开任何文件并查找某些模式(例如,Excel 2007+ OOXML文件以字符PK。CSV开头文件定期逗号,旧的Excel文件有自己的二进制格式和“魔术字”等)

在你的情况下,Excel打开文件,将其检测为HTML,并将其作为HTML表读取,并将其转换为电子表格。 你的代码实际上并没有发送“真正的”Excel工作簿 – 所以你的MIMEtypes是完全不正确的。

如果你想要的东西总是“正常工作”,我build议让用户以CSV格式下载数据,这有利于在Microsoft Excel,Apple Numbers,OpenOffice Calc和良好的记事本中实现跨平台和可打开的function。 确保将其作为text/csv

您不能隐式创buildExcel文件作为HTTP响应。 你基本上有两个select:

  1. 以Excel可以读取的格式创build响应,如逗号分隔(CVS)。
  2. 使用服务器端API以编程方式创buildExcel文件并将其作为附件发回。

如果您select第一个选项,则在Excel中打开该文件时,您将继续获得此popup窗口。 但是,该文件将在Excel中打开。

第二个选项可能会花费你的钱。 我曾经为一家名为SoftArtisans的公司工作,他们编写了一个名为ExcelWriter的API,可以满足您的需求:

http://www.officewriter.com/officewriter-free-evaluation.aspx

他们的主要竞争对手是Aspose,其产品被称为Aspose.Cells。 我没有亲自使用,但他们有自己的忠实客户,所以我假设产品是好的:

http://www.aspose.com/docs/display/cellsnet/Aspose.Cells