【问题标题】:Exporting HTML to Excel Without Losing Formatting在不丢失格式的情况下将 HTML 导出到 Excel
【发布时间】:2011-01-14 23:44:44
【问题描述】:

我有一个生成报告的 asp.net 页面。无论好坏,整个事情都是使用嵌套表生成的。我可以将页面导出到 excel,但是我丢失了所有格式(无法设置列宽等)。有没有办法处理这个?我愿意将任何愚蠢的 MS Office 特定标签添加到它的 html 端。

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

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

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

c) 需要从网站运行。

我们将不胜感激任何有关替代方法的帮助或建议。

谢谢 乔

【问题讨论】:

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


    【解决方案1】:

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

    如果已知最终用户拥有 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?

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

    【讨论】:

    • 我最终在一张纸上绘制了我想要的东西,然后将我自己的行跨越和跨越到一个解决方案中(我希望我永远不必对其进行任何维护)。一旦我把它全部放到一个表中,输出是可以接受的,但不是很好。
    【解决方案2】:

    SpreadsheetGear for .NET 可让您从 ASP.NET 生成格式化的 Excel 工作簿。

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

    免责声明:我拥有 SpreadsheetGear LLC

    【讨论】:

      【解决方案3】:

      下面的代码适用于我并保留所有表格格式。显然,源 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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-10-30
        • 2019-01-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-02-16
        • 1970-01-01
        相关资源
        最近更新 更多