我有一个程序可以选择将db内容写入excel电子表格。此功能包含在名为“Search_aspx”的页面中。
Response.ClearContent()
Response.Charset = ""
Response.ContentType = "application/vnd.ms-excel"
Response.AddHeader("Content-Disposition", "attachment; filename=FileName.xls")
Response.Cache.SetCacheability(HttpCacheability.Private)
Dim dg As New DataGrid
dg.DataSource = dtResults
dg.DataBind()
Dim sw As New System.IO.StringWriter()
Dim htw As New HtmlTextWriter(sw)
dg.RenderControl(htw)
Response.Write(sw.ToString)
Response.Flush()
Response.Close()
这种工作永远都很好,但上周我将解决方案迁移到了一台新服务器(Server03到Server08),现在它无法运行。当我尝试保存时,它询问我是否要“保存search_aspx”而不是“Save FileName.xls”。
这里有什么问题?
编辑:
好吧......我接受了下面发布的建议,并遵循了Mason的建议,页面仍然询问我是否要保存“Search_aspx”。现在已经在我的解决方案中安装了EPPlus,正确引用了等等....
Response.ClearContent()
Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
Response.AddHeader("Content-Disposition", "attachment; filename=FileName.xlsx")
Dim package As New ExcelPackage()
Dim sheet = package.Workbook.Worksheets.Add("Data")
sheet.Cells.LoadFromDataTable(dtResults, False)
Response.BinaryWrite(package.GetAsByteArray())
Response.Flush()
Response.Close()
答案 0 :(得分:1)
真正的问题是您没有创建XLS文件。您正在创建一个扩展名为.xls
的HTML文件。我讨论了为什么这是一个坏主意的几个原因,并详细说明了你可以做什么on my blog。
简短而甜蜜的版本是,在ASP.NET环境中生成.xls
文件没有好办法,你应该生成.xlsx
个文件和一个像样的库(在我的博客上讨论)或切换到另一种数据格式,如CSV。