代码之家  ›  专栏  ›  技术社区  ›  Arseni Mourzenko

从ASP.NET导出到Excel将生成无法用Excel查看器读取的文件

  •  1
  • Arseni Mourzenko  · 技术社区  · 15 年前

    我想从ASP.NET网站输出一些动态数据到Excel。我发现不需要使用ExcelXML或在服务器计算机上安装Excel的最简单方法是 output data as a table 并指定 应用程序/vnd.ms-excel 类型。

    问题是,当我这样做并尝试在Excel查看器中打开文件时,我收到以下错误消息:

    无法打开Microsoft Excel查看器 此类型的文件。

    然后什么也没有打开。

    即使是最简单的代码,如:

    protected void Page_Load(object sender, EventArgs e)
    {
        Response.Clear();
        Response.Buffer = true;
        HttpContext.Current.Response.AddHeader("content-disposition", "attachment; filename=Example.xls");
        Response.ContentType = "application/vnd.ms-excel";
        StringWriter stringWriter = new System.IO.StringWriter();
        HtmlTextWriter htmlTextWriter = new System.Web.UI.HtmlTextWriter(stringWriter);
        dataGrid.RenderControl(htmlTextWriter);
        Response.Write("<html><body><table><tr><td>A</td><td>B</td></tr><tr><td>C</td><td>D</td></tr></table></body></html>");
        Response.End();
    }
    

    产生相同的错误。

    什么会导致这种行为?是因为 观众 无法读取此类文件,但完整的Excel版本可以?

    2 回复  |  直到 15 年前
        1
  •  1
  •   Dayton Brown    15 年前

    Excel阅读器只能打开Excel文件。您实际上不是将其导出为Excel文件,而是将其导出为CSV或HTML。不一样。

    编辑

    你试过这个吗 Export to Excel?

        2
  •  2
  •   Warren Rumak    15 年前

    你永远不会,永远不会想在服务器上安装Excel。COM接口可以在没有用户界面的情况下工作,但它不是专门设计的,如果出现某种类型的错误,您可以在服务器上挂起大量excel.exe实例。它也不适用于IIs7.5的应用程序池标识,也不适用于服务器核心。

    理想的解决方案是使用能够构建二进制(或OOXML)Excel文件的第三方组件。SyncFusion和Aspose是这类工具的两个主要供应商。最终,您将得到可用于所有Excel版本的文件,以及其他软件(如OpenOffice、Google Docs、Outlook Web App等)中的文件。

    推荐文章