/// <summary>
/// 把Gridview中的数据导出到Excel
///
/// 使用方式:
///
/// 1.如果是使用了updatepanel或在母版页中使用了updatepanel,则在后台代码的Load里面加上
/// ScriptManager.RegisterPostBackControl(导出控件按钮(名称即可)); 或
/// ((ScriptManager)Master.FindControl("ScriptManager1")).RegisterPostBackControl(导出控件按钮(名称即可));
///
/// 2.在后台代码加上
/// public override void VerifyRenderingInServerForm(Control control)
///{
/// }
///
/// 3.在前台源里面的 <%@ Page %> 加上 EnableEventValidation = "false"
///
/// </summary>
/// <param name="page">当前页面,this.Page</param>
/// <param name="getGridView">要导出的GridView</param>
public static void ExportExcel(System.Web.UI.Page page, System.Web.UI.WebControls.GridView getGridView)
{
System.Web.HttpContext.Current.Response.Clear(); //将缓冲区中的所有数据流内容全部清除
System.Web.HttpContext.Current.Response.Buffer = true; //设置是否将数据流缓冲输出
System.Web.HttpContext.Current.Response.Charset = "GB2312";//设置输出流的http字符集格式
//导出文件为 Excel
System.Web.HttpContext.Current.Response.AppendHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(DateTime.Now.ToString("yyyy-MM-dd") + ".xls", System.Text.Encoding.UTF8)); //在数据流前添加http头
//attachment --- 意为作为附件下载
//inline --- 意为在线打开
//filename如过是中文,则可以用HttpUtility.UrlEncode(fileName,System.Text.Encoding.UTF8)进行编码,以解决文件名乱码的问题
System.Web.HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");//设置输出流为简体中文
System.Web.HttpContext.Current.Response.ContentType = "application/vnd.ms-excel";//设置输出文件类型为excel文件。
page.EnableViewState = false;
System.Globalization.CultureInfo myCItrad = new System.Globalization.CultureInfo("ZH-CN", true);
System.IO.StringWriter oStringWriter = new System.IO.StringWriter(myCItrad);
System.Web.UI.HtmlTextWriter oHtmlTextWriter = new System.Web.UI.HtmlTextWriter(oStringWriter);
getGridView.RenderControl(oHtmlTextWriter);
//Response.Write("<html><head><meta http-equiv=Content-Type content=/"text/html; charset=GB2312/"></head><body>");//如果是datalist等能生成table的控件可以不加
// Repeater1.RenderBeginTag(oHtmlTextWriter);
//Page为要导出的对象,当前是Page,如果是DataGrid,Repeater等都可以
System.Web.HttpContext.Current.Response.Write(oStringWriter.ToString());
System.Web.HttpContext.Current.Response.End();
}