2015-03-13 70 views
0

我有一个程序,可以将db内容写入excel电子表格。该功能包含在名为“Search_aspx”的页面中。从vb.net将表格内容写入xls

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”而不是“保存FileName.xls”。

这里有什么问题?

编辑:

所有右倾......我把贴在下面的意见,随后梅森的建议,而该网页还问我是否要保存“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() 

回答

1

真正的问题是你是不是创建一个XLS文件。您正在创建一个扩展名为.xls的HTML文件。我讨论了为什么这是一个坏主意的几个原因,并详细说明你可以做什么on my blog

短期和甜蜜的版本是,有没有什么好办法的做法产生.xls文件在ASP.NET环境,您应该生成.xlsx文件有像样的图书馆(在我的博客中讨论),或者切换到另一个数据格式如CSV。

+0

完全理解......但是,根据我们的要求,我需要一个创建xls的'快速和肮脏'的方法。我明白,这不是一个'真正的'xls,但用户只需要这种格式的东西。当使用propre库时,这个过程相对来说太长了。 – mrwienerdog 2015-03-13 16:07:23

+0

@mrwienerdog用户不能使用.xlsx文件吗? Office 2003以后的每个版本的Office和Office XP都支持它。不,这个过程不是“太长”。正如我的博客所示,这很容易。 – mason 2015-03-13 16:08:55

+0

谢谢,先生...我接受了您的建议,并安装了EPPlus。在上面做了一个编辑,但是TL; DR:它仍然是错误的。 – mrwienerdog 2015-03-13 18:15:24