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

时间:2010-02-09 20:12:45

标签: c# asp.net vb.net excel

我有一个生成报告的asp.net页面。无论好坏,整个事物都是使用嵌套表生成的。我能够将页面导出为ex​​cel,但是我丢失了所有格式(无法设置列宽等)。有办法处理这个吗?我愿意添加任何笨拙的MS Office特定标签,这些标签是html方面所必需的。

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

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

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

c)需要从网站上运行。

非常感谢任何有关替代方法的帮助或建议。

由于 乔

3 个答案:

答案 0 :(得分:2)

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

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

Microsoft Open XML

如果你去第三方路线,它们通常很贵,至少130美元

检查

上的此Stack Overflow线程

How can I read MS Office files in a server without installing MS Office and without using Interop Library?

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

答案 1 :(得分:0)

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

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

免责声明:我拥有SpreadsheetGear LLC

答案 2 :(得分:0)

以下代码适用于我并保留所有表格格式。源html表需要具有属性runat =“Server”,并且显然可以使用id。

基本上,它创建了一个新的(虚拟)表单,它只包含你的表并将其写入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