我有一个生成报告的asp.net页面。无论好坏,整个事物都是使用嵌套表生成的。我能够将页面导出为excel,但是我丢失了所有格式(无法设置列宽等)。有办法处理这个吗?我愿意添加任何笨拙的MS Office特定标签,这些标签是html方面所必需的。
如果这不可行且任何人有任何其他想法,则要求用户需要一份报告:
a)他们可以手动修改一些个性化/区域特定数据
b)需要根据用户的位置隐藏/显示列
c)需要从网站上运行。
非常感谢任何有关替代方法的帮助或建议。
由于 乔
答案 0 :(得分:2)
不幸的是,你真的没有第三方工具。
如果已知最终用户拥有Office 2007+,则可以使用开放XML格式。
如果你去第三方路线,它们通常很贵,至少130美元
检查
上的此Stack Overflow线程虽然您可以隐藏/显示代码中的列以在导出之前操作列,但这并不是什么大问题,只是外观的格式化将很困难。
答案 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