asp.net c# datatable导出到Excel乱码

把一个dataset里面的多个datatable导出到一个Excel中的多个Sheet。时而乱码,时而不乱码;时而页面自动关闭,时而不关闭。未发现规律。乱码时服务器上的文件是没有问题的(是先把Excel文件保存到服务器端的一个文件夹下再输出给用户),只是下载之后再打开有问题,感觉是把前台aspx文件输出到了Excel,如图所示:

而服务器上的文件或者说正常情况却是:

把文件输出到前台的代码如下:

protected static void SaveXls(string fileURL)
{
System.IO.FileInfo fileInfo = new System.IO.FileInfo(fileURL);
System.Web.HttpContext.Current.Response.Clear();
System.Web.HttpContext.Current.Response.Charset = "GB2312";
System.Web.HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.UTF8;
System.Web.HttpContext.Current.Response.AddHeader("content-disposition", "attachment;filename=" + System.Web.HttpContext.Current.Server.UrlEncode(fileInfo.Name.ToString()));
System.Web.HttpContext.Current.Response.AddHeader("content-length", fileInfo.Length.ToString());
System.Web.HttpContext.Current.Response.ContentType = "application/octet-stream";
System.Web.HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.Default;
System.Web.HttpContext.Current.Response.WriteFile(fileURL);
//System.Web.HttpContext.Current.Response.Flush();
//System.Web.HttpContext.Current.Response.End();
}

就是这样,求大神解救。
问题已解决,在writefile之前暂停线程1s即可。

第1个回答  2014-02-23
1你下载的时候是否使用了迅雷软件,去除浏览器关联
2 你数据库文件是否进行了XML或调用office SDK进行了编辑
3 你客户端office是否安装了加密软件
4 fileURL是否正确,端口号是否冲突,如不是使用默认80端口,需要将URL打全追问

怎么个全法?

第2个回答  2014-02-22
尝试通过这种方式来传回前台
HttpResponse.Redirect("~/DownLoadFile/xxx.xlsx" )
这样就是直接下载服务器文件了追问

你是说把这句
System.Web.HttpContext.Current.Response.WriteFile(fileURL);
改成这句?
System.Web.HttpContext.Current.Response.Redirect(fileURL);
貌似不行啊。

追答

HttpResponse 和System.Web.HttpContext.Current.Response 是两个不同的类

本回答被网友采纳
相似回答