Asp.net中DataTable导出到Excel的方法介绍

  

复制代码 代码如下:

  #region  DataTable导出到Excel

  /// <summary>

  /// DataTable导出到Excel

  /// </summary>

  /// <param name="pData">DataTable</param>

  /// <param name="pFileName">导出文件名</param>

  /// <param name="pHeader">导出标题以|分割</param>

  public static void DataTableExcel(System.Data.DataTable pData, string pFileName, string pHeader)

  {

  System.Web.UI.WebControls.DataGrid dgExport = null;

  // 当前对话

  System.Web.HttpContext curContext = System.Web.HttpContext.Current;

  // IO用于导出并返回excel文件

  System.IO.StringWriter strWriter = null;

  System.Web.UI.HtmlTextWriter htmlWriter = null;

  if (pData != null)

  {

  string UserAgent = curContext.Request.ServerVariables["http_user_agent"].ToLower();

  if (UserAgent.IndexOf("firefox") == -1)//火狐浏览器

  pFileName = HttpUtility.UrlEncode(pFileName, System.Text.Encoding.UTF8);

  curContext.Response.AddHeader("Content-Disposition", "attachment; filename=" + pFileName + ".xls");

  curContext.Response.ContentType = "application/vnd.ms-excel";

  strWriter = new System.IO.StringWriter();

  htmlWriter = new System.Web.UI.HtmlTextWriter(strWriter);

  // 为了解决dgData中可能进行了分页的情况,需要重新定义一个无分页的DataGrid

  dgExport = new System.Web.UI.WebControls.DataGrid();

  dgExport.DataSource = pData.DefaultView;

  dgExport.AllowPaging = false;

  dgExport.ShowHeader = false;//去掉标题

  dgExport.DataBind();

  string[] arrHeader = pHeader.Split('|');

  string strHeader = "<table border=\"1\" style=\"background-color:Gray;font-weight:bold;\"><tr>";

  foreach (string j in arrHeader)

  {

  strHeader += "<td>" + j.ToString() + "</td>";

  }

  strHeader += "</tr></table>";

  // 返回客户端

  dgExport.RenderControl(htmlWriter);

  string strMeta = "<meta http-equiv=\"content-type\" content=\"application/ms-excel; charset=UTF-8\"/>";

  curContext.Response.Write(strMeta + strHeader + strWriter.ToString());

  curContext.Response.End();

  }

  }

  #endregion