【发布时间】:2013-09-27 19:31:11
【问题描述】:
有人要求我对用 VB 编写的 ASP.NET WebForms 应用程序进行更改(我通常使用 C#)。
其中一项任务是尝试修复 Excel 下载。客户报告说,当他尝试在 Excel 中打开电子表格时,收到一个错误,说明电子表格已损坏。
导出 Excel 下载的代码出现在专用 ASPX 页面的 Load 事件中。看起来像这样:
Dim mytable As New HtmlTable
mytable = [Populate HTML Table Here]
mytable = returnclass.displaytable
mytable.Border = 1
mytable.BorderColor = "#CCCCCC"
HttpContext.Current.Response.Clear()
HttpContext.Current.Response.Buffer = True
Response.Write("<html xmlns:x=""urn:schemas-microsoft-com:office:excel"">")
Response.Write("<head>")
Response.Write("<!--[if gte mso 9]><xml>")
Response.Write("<x:ExcelWorkbook>")
Response.Write("<x:ExcelWorksheets>")
Response.Write("<x:ExcelWorksheet>")
Response.Write("<x:Name>" & worksheetTitle & "</x:Name>")
Response.Write("<x:WorksheetOptions>")
Response.Write("<x:Print>")
Response.Write("<x:ValidPrinterInfo/>")
Response.Write("</x:Print>")
Response.Write("</x:WorksheetOptions>")
Response.Write("</x:ExcelWorksheet>")
Response.Write("</x:ExcelWorksheets>")
Response.Write("</x:ExcelWorkbook>")
Response.Write("</xml>")
Response.Write("<![endif]--> ")
Response.Write("</head>")
Response.Write("<body>")
HttpContext.Current.Response.ContentType = "application/vnd.ms-excel"
HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment;filename=hhexport.xls ")
HttpContext.Current.Response.Charset = ""
'ouput table to html so excel can interperet.
Me.EnableViewState = False
Dim stringWriter As New System.IO.StringWriter()
Dim htmlWriter As New System.Web.UI.HtmlTextWriter(stringWriter)
mytable.RenderControl(htmlWriter)
HttpContext.Current.Response.Write(stringWriter.ToString)
我真的不明白这是在做什么。
问题:
代码生成一个常规的 ASP.NET
HtmlTable并将其分配给mytable。 Excel 可以在哪个星球上打开 HTML?我对这里的 XML 和
<!--[if gte mso 9]评论感到非常失望。谁能帮我理解这里发生了什么。
结果似乎有效,但我只是不熟悉这里的意图。任何提示表示赞赏。
编辑
在进一步测试中,问题似乎与赋予文件的扩展名 (xls) 有关。如果我指出,当前版本的 Excel 将继续加载文件。但是所有格式都丢失了。关于这将是什么类型的文件有什么建议吗?
编辑
看起来原作者是从here 那里得到这个想法的,尽管那个页面并没有真正描述正在发生的事情。
更新
感谢大家的回复。我将根据他们如何解决上述问题来记入这些回复。但是,出于我的目的,代码似乎一直有效。似乎较新版本的 Excel 现在警告用户包含 HTML 的 XLS 文件是与文件扩展名所建议的类型不同的文件。除了使用 CSV、OpenXML 或其他方法导出外,似乎对此无能为力。我在this blog找到了更多细节。
【问题讨论】:
-
是的,Excel 会像打开 Excel 单元格一样打开 HTML 表格。我见过的所有 Excel sn-ps 都没有包含
<html xmlns:x=""urn:schemas-microsoft-com:office:excel"">的部分。我只是实现这里找到的方法:aspfree.com/c/a/c-sharp/… -
呃!谢谢,但是,该网站的代码格式很糟糕。让人很难看清是什么。
-
是的,这不是最好的格式,但它是第一个使用我熟悉的代码的格式。
-
嗯,这似乎给了我完全相同的结果。 Excel 报告该文件的格式与文件扩展名指定的格式不同。
-
但它仍然可以打开,对吧?这种方法总是发生在我身上。
标签: asp.net vb.net excel webforms