Datagrid 导入到EXcel乱码的朋友,这里绝对解决

来源:互联网 发布:nba球员详细体测数据 编辑:程序博客网 时间:2024/06/07 08:55

 今天怎么有客户反应导出的excel的乱码,??!!我记得我测试过的啊,后来我用服务器上的再测了下,确实有的会乱码有的却不会,真是奇怪,后来改它的编码utf-8 big5 都试了,就是不行,网上找了一个遇到同样问题的朋友的解决方案,确实可行!!不错,谢谢

被注释的是我之前用的,不好的方法,

        private void BtnPushExcel_Click(object sender, System.EventArgs e)
        
{
             
string fileName = "Excel.xls";
            Export(
this.DataGrid1,fileName);
//            HttpContext.Current.Response.AppendHeader("Content-Disposition","attachment;filename="+HttpUtility.UrlEncode(fileName,System.Text.Encoding.UTF8)); 
//            HttpContext.Current.Response.Charset ="UTF-8";     
//            //HttpContext.Current.Response.ContentEncoding =System.Text.Encoding.GetEncoding("BIG5");  
//            HttpContext.Current.Response.ContentEncoding =System.Text.Encoding.GetEncoding("BIG5");  
//            HttpContext.Current.Response.ContentType ="application/ms-excel";
//            Datagrid2.Page.EnableViewState =false;    
//            System.IO.StringWriter  tw = new System.IO.StringWriter() ; 
//            System.Web.UI.HtmlTextWriter hw = new System.Web.UI.HtmlTextWriter (tw); 
//            this.DataGrid1.RenderControl(hw); 
//            HttpContext.Current.Response.Write(tw.ToString()); 
//            HttpContext.Current.Response.End(); 
                    
        
        }

 

 private   void   Export(System.Web.UI.WebControls.DataGrid   dg,string   fileName)   
                  {   
                            
                          System.Web.HttpResponse   httpResponse   
=   Page.Response;   
                          httpResponse.AppendHeader(
"Content-Disposition","attachment;filename="+HttpUtility.UrlEncode(fileName,System.Text.Encoding.UTF8));     
                          httpResponse.ContentEncoding
=System.Text.Encoding.GetEncoding("BIG5");   
                          httpResponse.ContentType   
="application/ms-excel";   
                          System.IO.StringWriter     tw   
=   new   System.IO.StringWriter()   ;   
                          System.Web.UI.HtmlTextWriter   hw   
=   new   System.Web.UI.HtmlTextWriter   (tw);   
                          dg.RenderControl(hw);   
                          
string   filePath   =   Server.MapPath("..")+fileName;   
                          System.IO.StreamWriter   sw   
=   System.IO.File.CreateText(filePath);   
                          sw.Write(tw.ToString());   
                          sw.Close();   
    
                          DownFile(httpResponse,fileName,filePath);   
                          httpResponse.End();   
                  }   
    
                  
private     bool   DownFile(System.Web.HttpResponse   Response,string   fileName,string   fullPath)   
                  {   
                          
try   
                          {   
                                  Response.ContentType   
=   "application/octet-stream";   
    
                                  Response.AppendHeader(
"Content-Disposition","attachment;filename="   +     
                                          HttpUtility.UrlEncode(fileName,System.Text.Encoding.UTF8)   
+   ";charset=BIG5");   
                                  System.IO.FileStream   fs
=   System.IO.File.OpenRead(fullPath);   
                                  
long   fLen=fs.Length;   
                                  
int   size=102400;//每100K同时下载数据     
                                  byte[]   readData   =   new   byte[size];//指定缓冲区的大小     
                                  if(size>fLen)size=Convert.ToInt32(fLen);   
                                  
long   fPos=0;   
                                  
bool   isEnd=false;   
                                  
while   (!isEnd)     
                                  {     
                                          
if((fPos+size)>fLen)   
                                          {   
                                                  size
=Convert.ToInt32(fLen-fPos);   
                                                  readData   
=   new   byte[size];   
                                                  isEnd
=true;   
                                          }   
                                          fs.Read(readData,   
0,   size);//读入一个压缩块     
                                          Response.BinaryWrite(readData);   
                                          fPos
+=size;   
                                  }     
                                  fs.Close();     
                                  System.IO.File.Delete(fullPath);   
                                  
return   true;   
                          }   
                          
catch   
                          {   
                                  
return   false;   
                          }   
                  }   
原创粉丝点击