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

 今天怎么有客户反应导出的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 ;   
                          }   
                  }   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值