我正在ASP上做一些Excel导出.NET网站.

Eingabe Kosten je GerÃt GerÃt:

这是我的代码:

Response.Clear();
Response.ContentType = "application/ms-excel";
Response.AddHeader("Content-Disposition", "inline;filename=NachkalkGeraete.xls;");
var writer = new HtmlTextWriter(Response.Output);

SomeControl.RenderControl(writer); /* FormView, Table, DataGrid... */

Response.End();

我已经try 过显式设置编码..但没有发生变化:

Response.Clear();
Response.ContentType = "application/vnd.ms-excel";
Response.AddHeader("Content-Disposition", "attachment; filename=NachkalkGeraete.xls");

Response.BufferOutput = true;
Response.ContentEncoding = System.Text.Encoding.UTF8;
Response.Charset = "UTF-8";
EnableViewState = false;

System.IO.StringWriter tw = new System.IO.StringWriter();
HtmlTextWriter hw = new HtmlTextWriter(tw);

SomeControl.RenderControl(hw);

Response.Write(tw.ToString());
Response.End();

请问怎么了?

推荐答案

我发现问题可能出在excel文件的头中,它不包含BOM byte sequence(在文件开头表示使用的编码).

所以我就这样做了,对我来说很管用:

Response.Clear();
Response.AddHeader("content-disposition","attachment;filename=Test.xls");   
Response.ContentType = "application/ms-excel";
Response.ContentEncoding = System.Text.Encoding.Unicode;
Response.BinaryWrite(System.Text.Encoding.Unicode.GetPreamble());

System.IO.StringWriter sw = new System.IO.StringWriter();
System.Web.UI.HtmlTextWriter hw = new HtmlTextWriter(sw);

FormView1.RenderControl(hw);

Response.Write(sw.ToString());
Response.End(); 

Asp.net相关问答推荐

Linq 将复杂类型聚合成一个字符串

在 ASP.Net 中使用 Page_Load 和 Page_PreRender

如何在 GridView 单元格中的(即
)中呈现解码的 HTML

任何人都有解决 Internet Explorer 上剩余 n 项问题的 idea 吗?

我可以在 .net 核心中使用 Entity Framework 6(非核心)吗?

Automapper - 映射器已初始化错误

ASP.NET 平台是否有与 Heroku 等价的工具?

无法获取项目引用的依赖项

为什么默认情况下不允许 GET 请求返回 JSON?

在 cookie 中存储多个值

ASP.NET URL 重写

HttpContext.Current.Cache.Insert 和 HttpContext.Current.Cache.Add 有什么区别

对于每个请求,RestClient 应该是单例还是新的

如何从 Asp.net Mvc-3 发送邮箱?

IIS 会话超时与 ASP.NET 会话超时

投票有什么问题?

ASP.Net 无法创建/卷影复制

哪个控件导致了回发?

如何从 ASP.NET Identity 获取用户列表?

IronRuby死了吗?