您的位置:首页 > 编程语言 > C#

C#导出Excel——多表头、表头跨行跨列合并

2015-05-20 17:39 483 查看
<span style="font-family: Arial, Helvetica, sans-serif;">
</span>
<span style="font-family: Arial, Helvetica, sans-serif;">public FileResult ExpDayReport(string the_date, int company_id, int city_id, int addr_id, string group, string kfid)</span>
{
GsReport rpBLL = new GsReport();
DataTable dt = rpBLL.ExpDayReport(the_date, company_id, city_id, addr_id, group, kfid);
return File(Export.DataTable2Excel(dt, "GB2312", DayReptExpRowDeal), "application/x-xls", the_date + "工时报表.xls");
}




public void DayReptExpRowDeal(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.Header)
{
//第一行表头
TableCellCollection tcHeader = e.Row.Cells;
tcHeader.Clear();

tcHeader.Add(new TableHeaderCell());
tcHeader[0].Attributes.Add("rowspan", "2"); //跨行
tcHeader[0].Text = "员工标识";

tcHeader.Add(new TableHeaderCell());
tcHeader[1].Attributes.Add("rowspan", "2");
tcHeader[1].Text = "姓名";

tcHeader.Add(new TableHeaderCell());
tcHeader[2].Attributes.Add("rowspan", "2");
tcHeader[2].Text = "组别";

tcHeader.Add(new TableHeaderCell());
tcHeader[3].Text = "工号";
tcHeader[3].Attributes.Add("rowspan", "2");

tcHeader.Add(new TableHeaderCell());
tcHeader[4].Text = "标识";
tcHeader[4].Attributes.Add("rowspan", "2");

tcHeader.Add(new TableHeaderCell());
tcHeader[5].Text = "班次";
tcHeader[5].Attributes.Add("rowspan", "2");

tcHeader.Add(new TableHeaderCell());
tcHeader[6].Text = "工时";
tcHeader[6].Attributes.Add("rowspan", "2");

tcHeader.Add(new TableHeaderCell());
tcHeader[7].Text = "排班时长";
tcHeader[7].Attributes.Add("rowspan", "2");

tcHeader.Add(new TableHeaderCell());
tcHeader[8].Text = "签入时长";
tcHeader[8].Attributes.Add("rowspan", "2");

tcHeader.Add(new TableHeaderCell());
tcHeader[9].Text = "所差工时";
tcHeader[9].Attributes.Add("rowspan", "2");

tcHeader.Add(new TableHeaderCell());
tcHeader[10].Text = "闲时工时";
tcHeader[10].Attributes.Add("colspan", "2");//跨列

tcHeader.Add(new TableHeaderCell());
tcHeader[11].Text = "考勤记录";
tcHeader[11].Attributes.Add("colspan", "2");

tcHeader.Add(new TableHeaderCell());
tcHeader[12].Text = "加班记录";
tcHeader[12].Attributes.Add("colspan", "2");

tcHeader.Add(new TableHeaderCell());
tcHeader[13].Text = "换班记录</tr><tr>";
tcHeader[13].Attributes.Add("colspan", "2");

//第二行表头
tcHeader.Add(new TableHeaderCell());
tcHeader[14].Text = "工时类型";

tcHeader.Add(new TableHeaderCell());
tcHeader[15].Text = "时长";

tcHeader.Add(new TableHeaderCell());
tcHeader[16].Text = "工时类型";

tcHeader.Add(new TableHeaderCell());
tcHeader[17].Text = "时长";

tcHeader.Add(new TableHeaderCell());
tcHeader[18].Text = "加班类型";

tcHeader.Add(new TableHeaderCell());
tcHeader[19].Text = "时长";

tcHeader.Add(new TableHeaderCell());
tcHeader[20].Text = "换班记录";

tcHeader.Add(new TableHeaderCell());
tcHeader[21].Text = "时长";
}
if (e.Row.RowType == DataControlRowType.DataRow)
{
e.Row.Cells[6].Attributes.Add("style", "vnd.ms-excel.numberformat:@");
e.Row.Cells[7].Attributes.Add("style", "vnd.ms-excel.numberformat:@");
e.Row.Cells[8].Attributes.Add("style", "vnd.ms-excel.numberformat:@");
e.Row.Cells[9].Attributes.Add("style", "vnd.ms-excel.numberformat:@");
e.Row.Cells[10].Text = ParmReplace.ParmDesc("wh_type", e.Row.Cells[10].Text);
e.Row.Cells[12].Text = ReplaceKqType(e.Row.Cells[12].Text);
e.Row.Cells[14].Text = ParmReplace.ParmDesc("ot_type", e.Row.Cells[14].Text);
}
e.Row.Cells[0].Visible = false;
}



        public string ReplaceKqType(string kq_types)
        {
            var result = "";
            var typeArray = kq_types.Split(',');
            var KqTypelist = new BLL.GS.Kaoqin().GetAllKqType();
            for (var i = 0; i < typeArray.Length; i++)
            {
                for (var j = 0; j < KqTypelist.Count; j++)
                {
                    if (KqTypelist[j].Kq_type.ToString() == typeArray[i])
                        result += KqTypelist[j].Kq_name + ",";
                }
            }
            result = result.Substring(0, result.Length - 1);
            result = Regex.Replace(result, @",", "<br/>", RegexOptions.IgnoreCase);//逗号替换为换行
            return result;
        }
        /// <summary>
        /// 使用方法:return File(Export.DataTable2Excel(dt, "GB2312", null), "application/x-xls", "3G.xls");
        /// </summary>
        /// <param name="dt"></param>
        /// <param name="filename"></param>
        /// <param name="encoding">其值为"UTF-8"或"GB2312"</param>
        /// <param name="gvExport_RowDataBound"></param>
        public static byte[] DataTable2Excel(DataTable dt,string encoding, GridViewRowEventHandler gvExport_RowDataBound)
        {
            GridView gvExport = null;
            //IO用于导出并返回Excel文件
            System.IO.StringWriter strWriter = null;
            System.Web.UI.HtmlTextWriter htmlWriter = null;
            byte[] str = null;
            if (dt != null)
            {
                strWriter = new System.IO.StringWriter();
                htmlWriter = new System.Web.UI.HtmlTextWriter(strWriter);
                gvExport = new GridView();
                if (gvExport_RowDataBound != null)
                    gvExport.RowDataBound += new GridViewRowEventHandler(gvExport_RowDataBound);
                gvExport.DataSource = dt.DefaultView;
                gvExport.AllowPaging = false;
                gvExport.DataBind();
                //把文件发送到客户端
                gvExport.RenderControl(htmlWriter);
                str = System.Text.Encoding.GetEncoding(encoding).GetBytes("<meta http-equiv='content-type' content='application/ms-excel; charset=" + encoding + "'/>" + strWriter.ToString());
            }
            return str;
        }


                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: