.net客户端导出Excel实现代码及注意事项

2019-05-20 13:58:47于海丽

    /// 创建日期:2005年10月08日
    /// 修 改 人:
    /// 修改日期:
    public static void DataTable2Excel(System.Data.DataTable dtData)
    {
      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 (dtData != null)
      {
        // 设置编码和附件格式
        curContext.Response.ContentType = "application/vnd.ms-excel";
        curContext.Response.ContentEncoding =System.Text.Encoding.UTF8;
        curContext.Response.Charset = "";
        
        // 导出excel文件
        strWriter = new System.IO.StringWriter();
        htmlWriter = new System.Web.UI.HtmlTextWriter(strWriter);
        // 为了解决dgData中可能进行了分页的情况,需要重新定义一个无分页的DataGrid
        dgExport = new System.Web.UI.WebControls.DataGrid();
        dgExport.DataSource = dtData.DefaultView;
        dgExport.AllowPaging = false;
        dgExport.DataBind();
        // 返回客户端
        dgExport.RenderControl(htmlWriter);  
        curContext.Response.Write(strWriter.ToString());
        curContext.Response.End();
      }
    }

需要注意的是,导出excel之前要把datatable的列名更改为客户要求的文字,就ok了。因为是从DataTable导出的,所以这种方法解决了分页数据的问题,堪称终极解决方案。