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

C# 将HTML导出到Excel而不丢失格式,c#,asp.net,vb.net,excel,C#,Asp.net,Vb.net,Excel,我有一个生成报告的asp.net页面。不管是好是坏,整个过程都是使用嵌套表生成的。我能够将页面导出到excel,但是我丢失了所有格式(无法设置列宽等)。有办法解决这个问题吗?我愿意在html端添加任何goofy MS Office特定的标签 如果这不可行,并且任何人有任何其他想法,则要求用户需要一份报告,该报告应: a) 他们可以手动修改一些个性化/区域特定数据 b) 需要根据用户的位置隐藏/显示列 c) 需要从网站上运行 如能提供任何关于替代方法的帮助或建议,将不胜感激 谢谢 Joe不幸的是,

我有一个生成报告的asp.net页面。不管是好是坏,整个过程都是使用嵌套表生成的。我能够将页面导出到excel,但是我丢失了所有格式(无法设置列宽等)。有办法解决这个问题吗?我愿意在html端添加任何goofy MS Office特定的标签

如果这不可行,并且任何人有任何其他想法,则要求用户需要一份报告,该报告应:

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

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

c) 需要从网站上运行

如能提供任何关于替代方法的帮助或建议,将不胜感激

谢谢
Joe

不幸的是,如果没有第三方工具,你真的无法做到

如果已知最终用户拥有Office 2007+,则可以使用开放式XML格式

如果你选择第三方路线,它们通常相当昂贵,至少130美元

检查该服务器上的堆栈溢出线程

虽然您可以在导出之前隐藏/显示代码中的列来操作这些列,但这并不是什么大问题,只是外观的格式化将很困难。

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

您可以查看我们的ASP.NET实时示例并下载免费试用版


免责声明:我拥有SpreadsheetGear LLC

以下代码适用于我,并保留所有表格格式。显然,源html表需要有属性runat=“Server”和一个id才能工作

本质上,它创建了一个新的(虚拟)表单,其中只包含您的表,并将其写入excel文件。如果您使用的是Excel2007,您将收到令人恼火的错误消息“您试图打开的文件的格式与扩展名指定的格式不同”,但是您可以安全地忽略此问题,如果您想打开它,可以说“是”

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

最后,我在一张纸上画出了我想要的东西,然后划行和划行,形成了一个解决方案(我希望我永远不必对它进行任何维护)。一旦我把它全部放到一个表中,输出是可以接受的,但不是很好。