#region GridView DataSet、Control 导出到 Excel /// <summary> /// 导出 Excel 文件 /// </summary> /// <param name="ds">数据集</param> /// <param name="fileName">Excel 文件名(不含扩展名)</param> public static void ToExcel(DataSet ds, string fileName) { ToExcel(ds.Tables[0], fileName); } /// <summary> /// 导出 Excel 文件 /// </summary> /// <param name="ds">数据集</param> /// <param name="fileName">Excel 文件名(不含扩展名)</param> public static void ToExcel(DataTable dt, string fileName) { System.IO.StringWriter tw = new System.IO.StringWriter(); System.Web.UI.HtmlTextWriter hw = new System.Web.UI.HtmlTextWriter(tw); GridView gv = new GridView(); gv.RowDataBound += new GridViewRowEventHandler(gv_RowDataBound); gv.DataSource = dt; gv.DataBind(); gv.RenderControl(hw); System.Web.HttpResponse Response = System.Web.HttpContext.Current.Response; Response.Clear(); Response.Charset = "gb2312"; Response.ContentType = "application/vnd.ms-excel"; Response.AppendHeader("Content-Disposition", "attachment;filename=" + System.Web.HttpUtility.UrlEncode(fileName) + ".xls"); Response.Write("<html><head><META http-equiv=/"Content-Type/" content=/"text/html; charset=gb2312/"></head><body>"); Response.Write(tw.ToString()); Response.Write("</body></html>"); Response.End(); hw.Close(); hw.Flush(); gv.Dispose(); tw.Close(); tw.Flush(); } private static void gv_RowDataBound(object sender, System.Web.UI.WebControls.GridViewRowEventArgs e) { DataTable dt = (DataTable)(((GridView)sender).DataSource); if (e.Row.RowType == DataControlRowType.DataRow) { for (int i = 0; i < e.Row.Cells.Count; i++) { if (dt.Columns[i].DataType == typeof(string)) { e.Row.Cells[i].Attributes.Add("style", "vnd.ms-excel.numberformat:@"); } } } } /// <summary> /// 导出 Excel 文件 /// </summary> /// <param name="control">控件名称</param> /// <param name="fileName">Excel 文件名(不含扩展名)</param> public static void ToExcel(Control control, string fileName) { ToExcel(control, fileName, true); } /// <summary> /// 导出 Excel 文件 /// </summary> /// <param name="control">控件名称</param> /// <param name="fileName">Excel 文件名(不含扩展名)</param> /// <param name="unformat">是否去除链接格式化串</param> public static void ToExcel(Control control, string fileName, bool unformat) { System.IO.StringWriter tw = new System.IO.StringWriter(); System.Web.UI.HtmlTextWriter hw = new System.Web.UI.HtmlTextWriter(tw); control.RenderControl(hw); System.Web.HttpResponse Response = System.Web.HttpContext.Current.Response; Response.Clear(); Response.Charset = "gb2312"; Response.ContentType = "application/vnd.ms-excel"; Response.AppendHeader("Content-Disposition", "attachment;filename=" + System.Web.HttpUtility.UrlEncode(fileName) + ".xls"); Response.Write("<html><head><META http-equiv=/"Content-Type/" content=/"text/html; charset=gb2312/"></head><body>"); string output = tw.ToString(); if (unformat) { // 用正则表达式去除HTML中的链接格式、图片格式 output = Regex.Replace(output, @"</s*/?/s*a[^>]*>", "", RegexOptions.Compiled | RegexOptions.IgnoreCase); output = Regex.Replace(output, @"</s*/?/s*img[^>]*>", "", RegexOptions.Compiled | RegexOptions.IgnoreCase); } Response.Write(output); Response.Write("</body></html>"); Response.End(); hw.Close(); hw.Flush(); tw.Close(); tw.Flush(); } /// <summary> /// 导出生成的内容到excel /// </summary> /// <param name="titlename">标题</param> /// <param name="totolcontent">导出内容string</param> public static void ToExcel(string titlename, string totolcontent) { System.Web.HttpContext.Current.Response.Clear(); System.Web.HttpContext.Current.Response.Charset = "gb2312"; //set the response mime type for excel System.Web.HttpContext.Current.Response.ContentType = "application/vnd.ms-excel"; System.Web.HttpContext.Current.Response.AppendHeader("Content-Disposition", "attachment;filename=" + System.Web.HttpUtility.UrlEncode(titlename) + ".xls"); //create a string writer System.IO.StringWriter tw = new System.IO.StringWriter(); //create an htmltextwriter which uses the stringwriter System.Web.UI.HtmlTextWriter hw = new System.Web.UI.HtmlTextWriter(tw); hw.Write(totolcontent); System.Web.HttpContext.Current.Response.Write(tw.ToString()); System.Web.HttpContext.Current.Response.End(); hw.Close(); hw.Flush(); tw.Close(); tw.Flush(); } #endregion