导出excel乱码

C# ASP.NET 导出Excel乱码最终解决方案
此方法直接调用即可

页面直接调用
Export(gdvDataList, "DataLog.xls", HttpContext.Current);

页面直接调用
Export(gdvDataList, "DataLog.xls", HttpContext.Current);


public  static void Export(System.Web.UI.WebControls.GridView dg, string fileName,System.Web.HttpContext ConResponse)
    {
       
        System.Web.HttpResponse httpResponse = ConResponse.Response;
        httpResponse.AppendHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8));
        httpResponse.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");
        httpResponse.ContentType = "application / vnd.xls";
        System.IO.StringWriter tw = new System.IO.StringWriter();
        System.Web.UI.HtmlTextWriter hw = new System.Web.UI.HtmlTextWriter(tw);
        dg.BorderWidth = 1;
        dg.RenderControl(hw);
        string filePath = ConResponse.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 static bool DownFile(System.Web.HttpResponse Response, string fileName, string fullPath)
    {
        try
        {
            Response.ContentType = "application/vnd.xls";
            Response.AppendHeader("Content-Disposition", "attachment;filename=" +
            HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8) + ";charset=UTF-8");
            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 = false;
                    
                    fs.Read(readData, 0, size);//
读入一个压缩块
                    Response.BinaryWrite(readData);
                    fPos += size;
                }
                else
                {
                    isEnd = true;
                }
                
            }
            fs.Close();
         
            System.IO.File.Delete(fullPath);
            return true;
        }
        catch
        {
            fs.Close();
            System.IO.File.Delete(fullPath);
            return false;
        }    
}

你可能感兴趣的:(导出excel乱码)