从ASP.NET导出到Excel会生成使用Excel Viewer无法读取的文件

我想从ASP.NET网站输出一些dynamic数据到Excel。 我发现,不需要使用Excel XML或在服务器计算机上安装Excel的最简单的方法是以表的forms输出数据,并指定application / vnd.ms-exceltypes。

问题是当我这样做,并试图在Excel Viewer中打开文件时,我收到以下错误信息:

Microsoft Excel Viewer无法打开此types的文件。

然后什么也没有打开。

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

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版本可以?

Excel阅读器只能打开Excel文件。 你真的不会将其导出为Excel文件,而是将其导出为csv或html。 这是不一样的。

编辑

你有没有试过这个导出到Excel?

你永远不会想要在服务器上安装Excel的路线。 COM接口可以在没有用户界面的情况下工作,但是它并不是用来做的,如果出现某种错误,你的服务器上可能会挂起大量的EXCEL.EXE实例。 它也很明显不适用于IIS 7.5的应用程序池标识,也不适用于Server Core。

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