博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

C#导出EXCEL(DataTable导出EXCEL)

Posted on 2017-02-27 10:48  RoBot_GuangQiang  阅读(224)  评论(0)    收藏  举报
        /// <summary>

        /// 导出xls

        /// </summary>

        /// <param name="ds">数据源DataSet</param>

        /// <param name="columns1">表列名称</param>

        /// <param name="columns2">列中文注释名称</param>

        /// <param name="FileName">导出文件名称(例如:*****.xls)</param>

        public void ToExcel(DataSet ds, string[] columns1, string[] columns2, string FileName)

        {

            DataTable dt = ds.Tables[0];    //bool b = t.Columns.Contains("bbb");

 

            dt = dt.DefaultView.ToTable(false, columns1);

 

            for (int i = 0; i < dt.Columns.Count; i++)

            {

                if (columns2 != null)

                {

                    if (columns2[i] != null && columns2[i] != "")

                    {

                        dt.Columns[i].ColumnName = columns2[i];

                    }

                }  

            }  

            //HttpContext.Current.Response.Charset = "UTF-8";

            HttpContext.Current.Response.Charset = "GB2312";

            //HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.UTF8;//设置输出流为简体中文

            System.Web.HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");

            HttpContext.Current.Response.ContentType = "application/ms-excel";//设置输出文件类型为excel文件

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

            HttpContext.Current.Response.AppendHeader("Content-Disposition", "attachment;filename=" + "" + FileName);

            //设置数字为文本格式

            string strStyle = "<style>td{mso-number-format:\"\\@\";}</style>";

            System.IO.StringWriter tw = new System.IO.StringWriter();//定义StringWriter输出对象

            HtmlTextWriter hw = new HtmlTextWriter(tw);//定义HtmlTextWriter对象

            //ctl.RenderControl(hw);//用RenderControl方法输出excel

            //DataGrid dg = new DataGrid();

            //dg.DataSource = ds.Tables[0];

            //dg.DataBind();

            //dg.RenderControl(hw);

            hw.WriteLine(strStyle);

            GridView gv = new GridView();

            gv.DataSource = dt;

            gv.DataBind();

            gv.RenderControl(hw);

            HttpContext.Current.Response.Write(tw.ToString());//输出

            HttpContext.Current.Response.Flush();

            HttpContext.Current.Response.End();

        }
View Code

 

调用例子:

//sql字段

string[] strName1 = "protype,pro,cdpro,date,fytype,lcname,km,bxje,bxr,ftbm,bz,slh,sta".Split(',');

//导出的Excel所对应的中文列名

string[] strName2 = "项目费用类型,发生项目,承担项目,日期,费用类型,流程名称,科目,报销金额,报销人,分摊部门,备注,实例号,流程状态".Split(',');

 

ToExcel(ds, strName1, strName2, DateTime.Now.ToString() + "部门项目费用统计表.xls");