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

时间:2014-11-15 00:03:58

标签: c# asp.net excel

我需要创建并优化文件并从aspx页面下载。我创建了一个简单的页面(default.aspx),上面有一个按钮(" 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);
    }
}

当我运行此代码并单击按钮时,它确实生成了带有测试的Excel文件&#34; foo&#34;在单元格A1中。问题是我从IE收到以下错误消息:

error message displayed by Excel

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

2 个答案:

答案 0 :(得分:1)

HTML不是Excel工作簿。

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

在您的情况下,Excel正在打开文件,将其检测为HTML,并将其作为HTML表格读取并将其转换为电子表格。您的代码实际上并没有发送“真正的”Excel工作簿 - 因此您的MIME类型完全不正确。

如果你想要总是“正常工作”的东西,我建议让用户以CSV格式下载数据,这样可以在Microsoft Excel,Apple Numbers,OpenOffice Calc和Good ol'中实现跨平台和可打开的优势。记事本。请务必将其作为text/csv投放。

答案 1 :(得分:0)

您不能将Excel文件隐式创建为HTTP响应。你基本上有两个选择:

  1. 以Excel可以读取的格式创建响应,例如以逗号分隔(CVS)。
  2. 使用服务器端API以编程方式创建Excel文件,并将其作为附件发回。
  3. 如果您选择第一个选项,则在Excel中打开文件时,您将继续弹出此选项。但是,该文件将在Excel中打开。

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

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

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

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