将HTML导出到Excel而不丢失格式

我有一个生成报告的asp.net页面。 无论好坏,整个事情都是使用嵌套表生成的。 我能够导出页面为Excel,但是我失去了我所有的格式(不能设置列宽等)。 有办法解决这个问题吗? 我打算添加所需的任何愚蠢的MS Office特定标签的HTML一面。

如果这是不可行的,如果任何人有任何其他的想法,要求用户需要一个报告:

a)他们可以手动修改某些个性化/区域特定的数据

b)根据用户的位置需要隐藏/显示列

c)需要从网站运行。

任何帮助或build议替代方法将不胜感激。

谢谢乔

不幸的是你不能没有第三方工具。

如果知道最终用户拥有Office 2007+,那么您可以使用开放的XML格式。

Microsoft Open XML

如果你去的第三方路线,他们通常是相当昂贵的,至less130美元

检查这个堆栈溢出线程

如何在不安装MS Office并且不使用Interop Library的情况下读取服务器中的MS Office文件?

虽然你可以隐藏/显示代码中的列来在导出之前操作列,但这不是什么大不了的事情,只是外观的格式化会很困难。

SpreadsheetGear for .NET将允许您从ASP.NET生成格式化的Excel工作簿。

你可以在这里看到我们的ASP.NET实例,并在这里下载免费试用版。

免责声明:我自己的SpreadsheetGear LLC

下面的代码适用于我,并保留所有的表格格式。 源html表格需要具有属性runat =“Server”和一个id,这个工作很明显。

从本质上讲,它创build一个新的(虚拟)forms,其中只包含您的表,并写入Excel文件。 如果您使用的是Excel 2007,那么您将看到令人恼怒的错误消息,即“您尝试打开的文件与扩展名指定的文件格式不同”,但您可以放心地忽略此内容并说“是”,您要打开它。

Public Sub exportTableExcel(ByVal aTable, ByVal filename) Dim sw As New StringWriter() Dim htw As New HtmlTextWriter(sw) HttpContext.Current.Response.ClearContent() HttpContext.Current.Response.AddHeader("content-disposition", "attachment; filename=" & filename) HttpContext.Current.Response.ContentType = "application/vnd.xls" HttpContext.Current.Response.Charset = "" ' Create a form to contain the table Dim frm As New HtmlForm() aTable.Parent.Controls.Add(frm) frm.Attributes("runat") = "server" 'prevent additional code from being exported frm.attributes("maintainScrollPositionOnPostBack") = "false" frm.Controls.Add(aTable) frm.RenderControl(htw) HttpContext.Current.Response.Write(sw.ToString()) HttpContext.Current.Response.End() frm.Dispose() htw.Dispose() sw.Dispose() End Sub