ASP.NET gridview导出excel,防止繁体产生有乱码的方式

//1.先引用比如 :
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data;
using System.Diagnostics;
using System.Data.SqlClient;
using System.Web.UI;
using System.Web.UI.WebControls;

 
   /// <summary>
    /// 清除控件中的所有控件,以便导出Excel
    /// </summary>
    /// <param name="control"></param>
    public static void ClearControls(Control control)
    {
        for (int i = control.Controls.Count - 1; i >= 0; i--)
        {
            ClearControls(control.Controls[i]);

        }

        if (!(control is TableCell))
        {
            if (control.GetType().GetProperty("SelectedItem") != null)
            {
                LiteralControl literal = new LiteralControl();
                control.Parent.Controls.Add(literal);
                try
                {
                    literal.Text = (string)control.GetType().GetProperty("SelectedItem").GetValue(control, null);
                }
                catch
                {
                }
                control.Parent.Controls.Remove(control);
            }
            else if (control.GetType().GetProperty("Text") != null)
            {
                LiteralControl literal = new LiteralControl();
                control.Parent.Controls.Add(literal);
                literal.Text = (string)control.GetType().GetProperty("Text").GetValue(control, null);
                control.Parent.Controls.Remove(control);
            }
        }


        return;
    }


//重点导出功能,采用utf8 编码

    public static void ExportToExcelUnicode(GridView GV_PO,string ExcelName)
    {
        
        HttpContext.Current.Response.Clear();
        HttpContext.Current.Response.AddHeader("content-disposition", "attachment;filename=" + ExcelName + ".xls");
        HttpContext.Current.Response.ContentType = "application/ms-excel";
        HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.UTF8;
        HttpContext.Current.Response.BinaryWrite(System.Text.Encoding.UTF8.GetPreamble());
        System.IO.StringWriter sw = new System.IO.StringWriter();
        System.Web.UI.HtmlTextWriter hw = new HtmlTextWriter(sw);
        GV_PO.RenderControl(hw);
        HttpContext.Current.Response.Write(sw.ToString());
        HttpContext.Current.Response.End();

    }

//把上方两个功能建立在 APPCODE 中 ,单独的类,比如 ebs 

//然后可以调用:

EBS.ClearControls(GV_PO);
EBS.ExportToExcelUnicode(GV_PO, "ParmSetPallet" + DateAndTime.Now.ToString("yyyyMMddhhmmss"));

 

 

posted @ 2019-04-17 10:11  轻烟随风  阅读(303)  评论(0编辑  收藏  举报