using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.IO;
using System.Linq;
using System.Text;
using Aspose.Words;
using Aspose.Words.Drawing;
using Aspose.Words.Drawing.Charts;
using Aspose.Words.Tables;
using BLL;
using NPOI.HSSF.UserModel;
using NPOI.SS.UserModel;
using NPOI.SS.Util;
using NPOI.XSSF.UserModel;
using AspNet = System.Web.UI.WebControls;
namespace FineUIPro.Web.JDGL.CostAnalysis
{
    public partial class JDReport : PageBase
    {
        #region 加载页面
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                this.txtMonths.Text = string.Format("{0:yyyy-MM}", DateTime.Now);
                GetValue();
            }
        }
        private void SetEmpty()
        {
            this.SimpleForm1.Title = string.Empty;
        }
        #endregion
        #region 获取记录值
        private void GetValue()
        {
            Model.Project_Installation installation = BLL.Project_InstallationService.GetProjectInstallationByProjectId(this.CurrUser.LoginProjectId);
            if (installation != null && !string.IsNullOrEmpty(this.txtMonths.Text.Trim()))
            {
                string id = installation.InstallationId;
                string date = this.txtMonths.Text.Trim() + "-01";
                string strSql = "select distinct (cast(YEAR(Months) as varchar(4))+'.'+cast(MONTH(Months) as varchar(2))) as 月份,t.Months," +
                               "ThisRealCost as '本月已完工作实际费用-ACWP',ThisPlanCost as '本月已完工作预算费用-BCWP',ThisPlanValue as '本月计划工作预算费用-BCWS',TotalPlanValue as '累计计划工作预算费用-BCWS',TotalRealCost as '累计已完工作实际费用-ACWP',TotalPlanCost as '累计已完工作预算费用-BCWP' " +
                               "from dbo.View_WBS_CostControlParentDetail as t where ParentId=@Id and t.Months<=@Months order by t.Months";
                //string date = DateTime.Now.Year + "-" + DateTime.Now.Month + "-01";
                SqlParameter[] parameter = new SqlParameter[]
                        {
                        new SqlParameter("@Id",id),
                        new SqlParameter("@Months",date),
                        };
                DataTable dt = SQLHelper.GetDataTableRunText(strSql, parameter);
                decimal lastbcws = 0, bcws = 0, lastacwp = 0, acwp = 0, lastbcwp = 0, bcwp = 0;
                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    dt.Rows[i]["本月已完工作实际费用-ACWP"] = Funs.GetNewDecimalOrZero(dt.Rows[i]["本月已完工作实际费用-ACWP"].ToString()) / 10000;
                    dt.Rows[i]["本月已完工作预算费用-BCWP"] = Funs.GetNewDecimalOrZero(dt.Rows[i]["本月已完工作预算费用-BCWP"].ToString()) / 10000;
                    dt.Rows[i]["本月计划工作预算费用-BCWS"] = Funs.GetNewDecimalOrZero(dt.Rows[i]["本月计划工作预算费用-BCWS"].ToString()) / 10000;
                    bcws = Funs.GetNewDecimalOrZero(dt.Rows[i]["累计计划工作预算费用-BCWS"].ToString());
                    acwp = Funs.GetNewDecimalOrZero(dt.Rows[i]["累计已完工作实际费用-ACWP"].ToString());
                    bcwp = Funs.GetNewDecimalOrZero(dt.Rows[i]["累计已完工作预算费用-BCWP"].ToString());
                    if (bcws == lastbcws)
                    {
                        if (Funs.GetNewDateTimeOrNow(dt.Rows[i]["Months"].ToString()) > DateTime.Now)
                        {
                            dt.Rows[i]["累计计划工作预算费用-BCWS"] = DBNull.Value;
                        }
                        else
                        {
                            dt.Rows[i]["累计计划工作预算费用-BCWS"] = bcws / 10000;
                        }
                    }
                    else
                    {
                        dt.Rows[i]["累计计划工作预算费用-BCWS"] = bcws / 10000;
                    }
                    if (acwp == lastacwp)
                    {
                        if (Funs.GetNewDateTimeOrNow(dt.Rows[i]["Months"].ToString()) > DateTime.Now)
                        {
                            dt.Rows[i]["累计已完工作实际费用-ACWP"] = DBNull.Value;
                        }
                        else
                        {
                            dt.Rows[i]["累计已完工作实际费用-ACWP"] = acwp / 10000;
                        }
                    }
                    else
                    {
                        dt.Rows[i]["累计已完工作实际费用-ACWP"] = acwp / 10000;
                    }
                    if (bcwp == lastbcwp)
                    {
                        if (Funs.GetNewDateTimeOrNow(dt.Rows[i]["Months"].ToString()) > DateTime.Now)
                        {
                            dt.Rows[i]["累计已完工作预算费用-BCWP"] = DBNull.Value;
                        }
                        else
                        {
                            dt.Rows[i]["累计已完工作预算费用-BCWP"] = bcwp / 10000;
                        }
                    }
                    else
                    {
                        dt.Rows[i]["累计已完工作预算费用-BCWP"] = bcwp / 10000;
                    }
                    lastbcws = bcws;
                    lastacwp = acwp;
                    lastbcwp = bcwp;
                }
                if (dt.Rows.Count > 0)
                {
                    this.ChartEV.CreateMaryChart(dt, 1220, 420, null);
                    decimal BCWP = Funs.GetNewDecimalOrZero(dt.Rows[dt.Rows.Count - 1]["累计已完工作预算费用-BCWP"].ToString());
                    decimal BCWS = Funs.GetNewDecimalOrZero(dt.Rows[dt.Rows.Count - 1]["累计计划工作预算费用-BCWS"].ToString());
                    decimal ACWP = Funs.GetNewDecimalOrZero(dt.Rows[dt.Rows.Count - 1]["累计已完工作实际费用-ACWP"].ToString());
                    decimal mBCWP = Funs.GetNewDecimalOrZero(dt.Rows[dt.Rows.Count - 1]["本月已完工作预算费用-BCWP"].ToString());
                    decimal mBCWS = Funs.GetNewDecimalOrZero(dt.Rows[dt.Rows.Count - 1]["本月计划工作预算费用-BCWS"].ToString());
                    decimal mACWP = Funs.GetNewDecimalOrZero(dt.Rows[dt.Rows.Count - 1]["本月已完工作实际费用-ACWP"].ToString());
                    decimal CV = BCWP - ACWP;
                    decimal SV = BCWP - BCWS;
                    decimal CPI = 0;
                    if (ACWP > 0)
                    {
                        CPI = BCWP / ACWP;
                    }
                    decimal SPI = 0;
                    if (BCWS > 0)
                    {
                        SPI = BCWP / BCWS;
                    }
                    decimal mCV = mBCWP - mACWP;
                    decimal mSV = mBCWP - mBCWS;
                    decimal mCPI = 0;
                    if (mACWP > 0)
                    {
                        mCPI = mBCWP / mACWP;
                    }
                    decimal mSPI = 0;
                    if (mBCWS > 0)
                    {
                        mSPI = mBCWP / mBCWS;
                    }
                    //总体进度
                    DataTable table2 = new DataTable();
                    table2.Columns.Add(new DataColumn("Id", typeof(String)));
                    table2.Columns.Add(new DataColumn("BCWP", typeof(String)));
                    table2.Columns.Add(new DataColumn("BCWS", typeof(String)));
                    table2.Columns.Add(new DataColumn("ACWP", typeof(String)));
                    table2.Columns.Add(new DataColumn("CV", typeof(String)));
                    table2.Columns.Add(new DataColumn("SV", typeof(String)));
                    table2.Columns.Add(new DataColumn("CPI", typeof(String)));
                    table2.Columns.Add(new DataColumn("SPI", typeof(String)));
                    DataRow row2;
                    row2 = table2.NewRow();
                    row2[0] = SQLHelper.GetNewID();
                    row2[1] = BCWP.ToString("0.####");
                    row2[2] = BCWS.ToString("0.####");
                    row2[3] = ACWP.ToString("0.####");
                    row2[4] = CV.ToString("0.####");
                    row2[5] = SV.ToString("0.####");
                    row2[6] = CPI.ToString("0.####");
                    row2[7] = SPI.ToString("0.####");
                    table2.Rows.Add(row2);
                    this.Grid2.DataSource = table2;
                    this.Grid2.DataBind();
                    //本月进度
                    table2.Rows.Clear();
                    row2[0] = SQLHelper.GetNewID();
                    row2[1] = mBCWP.ToString("0.####");
                    row2[2] = mBCWS.ToString("0.####");
                    row2[3] = mACWP.ToString("0.####");
                    row2[4] = mCV.ToString("0.####");
                    row2[5] = mSV.ToString("0.####");
                    row2[6] = mCPI.ToString("0.####");
                    row2[7] = mSPI.ToString("0.####");
                    table2.Rows.Add(row2);
                    this.Grid3.DataSource = table2;
                    this.Grid3.DataBind();
                    //按专业统计
                    DataTable table4 = new DataTable();
                    table4.Columns.Add(new DataColumn("Id", typeof(String)));
                    table4.Columns.Add(new DataColumn("SupId", typeof(String)));
                    table4.Columns.Add(new DataColumn("Name", typeof(String)));
                    table4.Columns.Add(new DataColumn("mBCWP", typeof(String)));
                    table4.Columns.Add(new DataColumn("mBCWS", typeof(String)));
                    table4.Columns.Add(new DataColumn("mACWP", typeof(String)));
                    table4.Columns.Add(new DataColumn("mCV", typeof(String)));
                    table4.Columns.Add(new DataColumn("mSV", typeof(String)));
                    table4.Columns.Add(new DataColumn("mCPI", typeof(String)));
                    table4.Columns.Add(new DataColumn("mSPI", typeof(String)));
                    table4.Columns.Add(new DataColumn("BCWP", typeof(String)));
                    table4.Columns.Add(new DataColumn("BCWS", typeof(String)));
                    table4.Columns.Add(new DataColumn("ACWP", typeof(String)));
                    table4.Columns.Add(new DataColumn("CV", typeof(String)));
                    table4.Columns.Add(new DataColumn("SV", typeof(String)));
                    table4.Columns.Add(new DataColumn("CPI", typeof(String)));
                    table4.Columns.Add(new DataColumn("SPI", typeof(String)));
                    Model.SGGLDB db = Funs.DB;
                    var cnProfessions = from x in db.WBS_CnProfession where x.ProjectId == this.CurrUser.LoginProjectId && x.IsApprove == true select x;
                    var installationIds = cnProfessions.Select(x => x.InstallationId).Distinct().ToList();
                    var installations = from x in db.Project_Installation where x.ProjectId == this.CurrUser.LoginProjectId && installationIds.Contains(x.InstallationId) select x;
                    var unitProjects = from x in db.Wbs_UnitProject where x.ProjectId == this.CurrUser.LoginProjectId && x.IsApprove == true select x;
                    var details = from x in db.View_WBS_CostControlParentDetail
                                  where x.Months == Funs.GetNewDateTime(date)
                                  select x;
                    DataRow row4;
                    decimal cnACWP, cnBCWP, cnBCWS, cnmACWP, cnmBCWP, cnmBCWS, cnCV, cnSV, cnCPI, cnSPI, cnmCV, cnmSV, cnmCPI, cnmSPI,
                        unACWP, unBCWP, unBCWS, unmACWP, unmBCWP, unmBCWS, unCV, unSV, unCPI, unSPI, unmCV, unmSV, unmCPI, unmSPI,
                        inACWP, inBCWP, inBCWS, inmACWP, inmBCWP, inmBCWS, inCV, inSV, inCPI, inSPI, inmCV, inmSV, inmCPI, inmSPI;
                    int a = 1, b = 1, c = 1;
                    foreach (var item in installations)
                    {
                        inACWP = 0;
                        inBCWP = 0;
                        inBCWS = 0;
                        inmACWP = 0;
                        inmBCWP = 0;
                        inmBCWS = 0;
                        inCV = 0;
                        inSV = 0;
                        inCPI = 0;
                        inSPI = 0;
                        inmCV = 0;
                        inmSV = 0;
                        inmCPI = 0;
                        inmSPI = 0;
                        row4 = table4.NewRow();
                        row4[0] = c.ToString();
                        row4[1] = "0";
                        row4[2] = item.InstallationName;
                        var inDetails = (from x in details
                                         where x.ParentId == item.InstallationId
                                         select x).ToList();
                        inmACWP = Funs.GetNewDecimalOrZero(inDetails.Select(x => x.ThisRealCost).Sum().ToString()) / 10000;
                        inmBCWP = Funs.GetNewDecimalOrZero(inDetails.Select(x => x.ThisPlanCost).Sum().ToString()) / 10000;
                        inmBCWS = Funs.GetNewDecimalOrZero(inDetails.Select(x => x.ThisPlanValue).Sum().ToString()) / 10000;
                        inmCV = inmBCWP - inmACWP;
                        inmSV = inmBCWP - inmBCWS;
                        if (inmACWP > 0)
                        {
                            inmCPI = inmBCWP / inmACWP;
                        }
                        if (inmBCWS > 0)
                        {
                            inmSPI = inmBCWP / inmBCWS;
                        }
                        row4[3] = inmBCWP.ToString("0.####");
                        row4[4] = inmBCWS.ToString("0.####");
                        row4[5] = inmACWP.ToString("0.####");
                        row4[6] = inmCV.ToString("0.####");
                        row4[7] = inmSV.ToString("0.####");
                        row4[8] = inmCPI.ToString("0.####");
                        row4[9] = inmSPI.ToString("0.####");
                        inACWP = Funs.GetNewDecimalOrZero(inDetails.Select(x => x.TotalRealCost).Sum().ToString()) / 10000;
                        inBCWP = Funs.GetNewDecimalOrZero(inDetails.Select(x => x.TotalPlanCost).Sum().ToString()) / 10000;
                        inBCWS = Funs.GetNewDecimalOrZero(inDetails.Select(x => x.TotalPlanValue).Sum().ToString()) / 10000;
                        inCV = inBCWP - inACWP;
                        inSV = inBCWP - inBCWS;
                        if (inACWP > 0)
                        {
                            inCPI = inBCWP / inACWP;
                        }
                        if (inBCWS > 0)
                        {
                            inSPI = inBCWP / inBCWS;
                        }
                        row4[10] = inBCWP.ToString("0.####");
                        row4[11] = inBCWS.ToString("0.####");
                        row4[12] = inACWP.ToString("0.####");
                        row4[13] = inCV.ToString("0.####");
                        row4[14] = inSV.ToString("0.####");
                        row4[15] = inCPI.ToString("0.####");
                        row4[16] = inSPI.ToString("0.####");
                        table4.Rows.Add(row4);
                        a = 1;
                        var icnProfessions = cnProfessions.Where(x => x.InstallationId == item.InstallationId);
                        foreach (var cn in icnProfessions)
                        {
                            cnACWP = 0;
                            cnBCWP = 0;
                            cnBCWS = 0;
                            cnmACWP = 0;
                            cnmBCWP = 0;
                            cnmBCWS = 0;
                            cnCV = 0;
                            cnSV = 0;
                            cnCPI = 0;
                            cnSPI = 0;
                            cnmCV = 0;
                            cnmSV = 0;
                            cnmCPI = 0;
                            cnmSPI = 0;
                            row4 = table4.NewRow();
                            row4[0] = c.ToString() + "." + a.ToString();
                            row4[1] = c;
                            row4[2] = cn.CnProfessionName;
                            var cnDetails = (from x in details
                                             where x.ParentId == cn.CnProfessionId
                                             select x).ToList();
                            cnmACWP = Funs.GetNewDecimalOrZero(cnDetails.Select(x => x.ThisRealCost).Sum().ToString()) / 10000;
                            cnmBCWP = Funs.GetNewDecimalOrZero(cnDetails.Select(x => x.ThisPlanCost).Sum().ToString()) / 10000;
                            cnmBCWS = Funs.GetNewDecimalOrZero(cnDetails.Select(x => x.ThisPlanValue).Sum().ToString()) / 10000;
                            cnmCV = cnmBCWP - cnmACWP;
                            cnmSV = cnmBCWP - cnmBCWS;
                            if (cnmACWP > 0)
                            {
                                cnmCPI = cnmBCWP / cnmACWP;
                            }
                            if (cnmBCWS > 0)
                            {
                                cnmSPI = cnmBCWP / cnmBCWS;
                            }
                            row4[3] = cnmBCWP.ToString("0.####");
                            row4[4] = cnmBCWS.ToString("0.####");
                            row4[5] = cnmACWP.ToString("0.####");
                            row4[6] = cnmCV.ToString("0.####");
                            row4[7] = cnmSV.ToString("0.####");
                            row4[8] = cnmCPI.ToString("0.####");
                            row4[9] = cnmSPI.ToString("0.####");
                            cnACWP = Funs.GetNewDecimalOrZero(cnDetails.Select(x => x.TotalRealCost).Sum().ToString()) / 10000;
                            cnBCWP = Funs.GetNewDecimalOrZero(cnDetails.Select(x => x.TotalPlanCost).Sum().ToString()) / 10000;
                            cnBCWS = Funs.GetNewDecimalOrZero(cnDetails.Select(x => x.TotalPlanValue).Sum().ToString()) / 10000;
                            cnCV = cnBCWP - cnACWP;
                            cnSV = cnBCWP - cnBCWS;
                            if (cnACWP > 0)
                            {
                                cnCPI = cnBCWP / cnACWP;
                            }
                            if (cnBCWS > 0)
                            {
                                cnSPI = cnBCWP / cnBCWS;
                            }
                            row4[10] = cnBCWP.ToString("0.####");
                            row4[11] = cnBCWS.ToString("0.####");
                            row4[12] = cnACWP.ToString("0.####");
                            row4[13] = cnCV.ToString("0.####");
                            row4[14] = cnSV.ToString("0.####");
                            row4[15] = cnCPI.ToString("0.####");
                            row4[16] = cnSPI.ToString("0.####");
                            table4.Rows.Add(row4);
                            b = 1;
                            var unLists = from x in unitProjects where x.CnProfessionId == cn.CnProfessionId orderby x.SortIndex select x;
                            foreach (var un in unLists)
                            {
                                unACWP = 0;
                                unBCWP = 0;
                                unBCWS = 0;
                                unmACWP = 0;
                                unmBCWP = 0;
                                unmBCWS = 0;
                                unCV = 0;
                                unSV = 0;
                                unCPI = 0;
                                unSPI = 0;
                                unmCV = 0;
                                unmSV = 0;
                                unmCPI = 0;
                                unmSPI = 0;
                                row4 = table4.NewRow();
                                row4[0] = c.ToString() + "." + a.ToString() + "." + b.ToString();
                                row4[1] = c.ToString() + "." + a.ToString();
                                row4[2] = un.UnitProjectName;
                                var unDetails = from x in details
                                                where x.ParentId == un.UnitProjectId
                                                select x;
                                unmACWP = Funs.GetNewDecimalOrZero(unDetails.Select(x => x.ThisRealCost).Sum().ToString()) / 10000;
                                unmBCWP = Funs.GetNewDecimalOrZero(unDetails.Select(x => x.ThisPlanCost).Sum().ToString()) / 10000;
                                unmBCWS = Funs.GetNewDecimalOrZero(unDetails.Select(x => x.ThisPlanValue).Sum().ToString()) / 10000;
                                unmCV = unmBCWP - unmACWP;
                                unmSV = unmBCWP - unmBCWS;
                                if (unmACWP > 0)
                                {
                                    unmCPI = unmBCWP / unmACWP;
                                }
                                if (unmBCWS > 0)
                                {
                                    unmSPI = unmBCWP / unmBCWS;
                                }
                                row4[3] = unmBCWP.ToString("0.####");
                                row4[4] = unmBCWS.ToString("0.####");
                                row4[5] = unmACWP.ToString("0.####");
                                row4[6] = unmCV.ToString("0.####");
                                row4[7] = unmSV.ToString("0.####");
                                row4[8] = unmCPI.ToString("0.####");
                                row4[9] = unmSPI.ToString("0.####");
                                unACWP = Funs.GetNewDecimalOrZero(unDetails.Select(x => x.TotalRealCost).Sum().ToString()) / 10000;
                                unBCWP = Funs.GetNewDecimalOrZero(unDetails.Select(x => x.TotalPlanCost).Sum().ToString()) / 10000;
                                unBCWS = Funs.GetNewDecimalOrZero(unDetails.Select(x => x.TotalPlanValue).Sum().ToString()) / 10000;
                                unCV = unBCWP - unACWP;
                                unSV = unBCWP - unBCWS;
                                if (unACWP > 0)
                                {
                                    unCPI = unBCWP / unACWP;
                                }
                                if (unBCWS > 0)
                                {
                                    unSPI = unBCWP / unBCWS;
                                }
                                row4[10] = unBCWP.ToString("0.####");
                                row4[11] = unBCWS.ToString("0.####");
                                row4[12] = unACWP.ToString("0.####");
                                row4[13] = unCV.ToString("0.####");
                                row4[14] = unSV.ToString("0.####");
                                row4[15] = unCPI.ToString("0.####");
                                row4[16] = unSPI.ToString("0.####");
                                table4.Rows.Add(row4);
                                b++;
                            }
                            a++;
                        }
                        c++;
                    }
                    if (table4.Rows.Count > 0)
                    {
                        this.Grid4.DataSource = table4;
                        this.Grid4.DataBind();
                    }
                    //按设备材料分类统计
                    DataTable table5 = new DataTable();
                    table5.Columns.Add(new DataColumn("Id", typeof(String)));
                    table5.Columns.Add(new DataColumn("SupId", typeof(String)));
                    table5.Columns.Add(new DataColumn("Name", typeof(String)));
                    table5.Columns.Add(new DataColumn("Unit", typeof(String)));
                    table5.Columns.Add(new DataColumn("TotalNum", typeof(String)));
                    table5.Columns.Add(new DataColumn("mThisNum", typeof(String)));
                    table5.Columns.Add(new DataColumn("tThisNum", typeof(String)));
                    table5.Columns.Add(new DataColumn("mRate", typeof(String)));
                    table5.Columns.Add(new DataColumn("tRate", typeof(String)));
                    DataRow row5;
                    var cnProfessionInits = from x in db.WBS_CnProfessionInit orderby x.SortIndex select x;
                    var costControls = from x in db.WBS_CostControl
                                       join z in db.WBS_EquipmentMaterialType on x.EquipmentMaterialTypeId equals z.EquipmentMaterialTypeId
                                       join t in db.Wbs_WbsSet on x.WbsSetId equals t.WbsSetId
                                       where x.ProjectId == this.CurrUser.LoginProjectId
                                       select new
                                       {
                                           x.Unit,
                                           x.TotalNum,
                                           z.EquipmentMaterialBigTypeId,
                                           z.EquipmentMaterialTypeId,
                                           t.InstallationId,
                                       };
                    var costControlDetails = from x in db.WBS_CostControlDetail
                                             join y in db.WBS_CostControl on x.CostControlId equals y.CostControlId
                                             join z in db.WBS_EquipmentMaterialType on y.EquipmentMaterialTypeId equals z.EquipmentMaterialTypeId
                                             join t in db.Wbs_WbsSet on y.WbsSetId equals t.WbsSetId
                                             where x.Months <= Funs.GetNewDateTime(date) && y.ProjectId == this.CurrUser.LoginProjectId
                                             orderby x.Months descending
                                             select new
                                             {
                                                 x.CostControlDetailId,
                                                 t.InstallationId,
                                                 y.EquipmentMaterialTypeId,
                                                 z.EquipmentMaterialBigTypeId,
                                                 z.EquipmentMaterialTypeName,
                                                 x.Months,
                                                 x.ThisNum,
                                             };
                    var equipmentMaterialBigTypes = from x in db.WBS_EquipmentMaterialBigType orderby x.EquipmentMaterialBigTypeCode select x;
                    var equipmentMaterialTypes = from x in db.WBS_EquipmentMaterialType orderby x.EquipmentMaterialTypeCode select x;
                    int v = 1, w = 2, d = 1, f = 1;
                    foreach (var cn in cnProfessionInits)
                    {
                        row5 = table5.NewRow();
                        row5[0] = v.ToString();
                        row5[1] = "0";
                        row5[2] = cn.CnProfessionName;
                        table5.Rows.Add(row5);
                        row5 = table5.NewRow();
                        row5[0] = v.ToString() + ".1";
                        row5[1] = v.ToString();
                        row5[2] = "本专业汇总统计";
                        table5.Rows.Add(row5);
                        d = 1;
                        var bigTypes = equipmentMaterialBigTypes.Where(x => x.CnProfessionId == cn.CnProfessionId).OrderBy(x => x.EquipmentMaterialBigTypeCode);
                        foreach (var bigType in bigTypes)
                        {
                            row5 = table5.NewRow();
                            row5[0] = v.ToString() + ".1." + d.ToString();
                            row5[1] = v.ToString() + ".1";
                            row5[2] = bigType.EquipmentMaterialBigTypeName;
                            var list = costControls.Where(x => x.EquipmentMaterialBigTypeId == bigType.EquipmentMaterialBigTypeId);
                            if (list.Count() > 0)
                            {
                                row5[3] = list.First().Unit;
                                row5[4] = list.ToList().Sum(x => x.TotalNum ?? 0);
                                var list2 = costControlDetails.Where(x => x.EquipmentMaterialBigTypeId == bigType.EquipmentMaterialBigTypeId && x.Months == Funs.GetNewDateTime(date));
                                row5[5] = list2.ToList().Sum(x => x.ThisNum ?? 0);
                                var list3 = costControlDetails.Where(x => x.EquipmentMaterialBigTypeId == bigType.EquipmentMaterialBigTypeId);
                                row5[6] = list3.ToList().Sum(x => x.ThisNum ?? 0);
                                if (row5[4].ToString() != "0" && row5[5].ToString() != "0")
                                {
                                    row5[7] = (Funs.GetNewDecimalOrZero(row5[5].ToString()) / Funs.GetNewDecimalOrZero(row5[4].ToString()) * 100).ToString("0.##") + "%";
                                }
                                else
                                {
                                    row5[7] = "/";
                                }
                                if (row5[4].ToString() != "0" && row5[6].ToString() != "0")
                                {
                                    row5[8] = (Funs.GetNewDecimalOrZero(row5[6].ToString()) / Funs.GetNewDecimalOrZero(row5[4].ToString()) * 100).ToString("0.##") + "%";
                                }
                                else
                                {
                                    row5[8] = "/";
                                }
                            }
                            table5.Rows.Add(row5);
                            f = 1;
                            var types = equipmentMaterialTypes.Where(x => x.EquipmentMaterialBigTypeId == bigType.EquipmentMaterialBigTypeId).OrderBy(x => x.EquipmentMaterialTypeCode);
                            foreach (var equipmentMaterialType in types)
                            {
                                row5 = table5.NewRow();
                                row5[0] = v.ToString() + ".1." + d.ToString() + "." + f.ToString();
                                row5[1] = v.ToString() + ".1." + d.ToString();
                                row5[2] = equipmentMaterialType.EquipmentMaterialTypeName;
                                var lists = costControls.Where(x => x.EquipmentMaterialTypeId == equipmentMaterialType.EquipmentMaterialTypeId);
                                if (lists.Count() > 0)
                                {
                                    row5[3] = lists.First().Unit;
                                    row5[4] = lists.ToList().Sum(x => x.TotalNum ?? 0);
                                    var list2s = costControlDetails.Where(x => x.EquipmentMaterialTypeId == equipmentMaterialType.EquipmentMaterialTypeId && x.Months == Funs.GetNewDateTime(date));
                                    row5[5] = list2s.ToList().Sum(x => x.ThisNum ?? 0);
                                    var list3s = costControlDetails.Where(x => x.EquipmentMaterialTypeId == equipmentMaterialType.EquipmentMaterialTypeId);
                                    row5[6] = list3s.ToList().Sum(x => x.ThisNum ?? 0);
                                    if (row5[4].ToString() != "0" && row5[5].ToString() != "0")
                                    {
                                        row5[7] = (Funs.GetNewDecimalOrZero(row5[5].ToString()) / Funs.GetNewDecimalOrZero(row5[4].ToString()) * 100).ToString("0.##") + "%";
                                    }
                                    else
                                    {
                                        row5[7] = "/";
                                    }
                                    if (row5[4].ToString() != "0" && row5[6].ToString() != "0")
                                    {
                                        row5[8] = (Funs.GetNewDecimalOrZero(row5[6].ToString()) / Funs.GetNewDecimalOrZero(row5[4].ToString()) * 100).ToString("0.##") + "%";
                                    }
                                    else
                                    {
                                        row5[8] = "/";
                                    }
                                }
                                table5.Rows.Add(row5);
                                f++;
                            }
                            d++;
                        }
                        w = 2;
                        foreach (var ins in installations)
                        {
                            row5 = table5.NewRow();
                            row5[0] = v.ToString() + "." + w.ToString();
                            row5[1] = v.ToString();
                            row5[2] = ins.InstallationName;
                            table5.Rows.Add(row5);
                            d = 1;
                            var bigTypes2 = equipmentMaterialBigTypes.Where(x => x.CnProfessionId == cn.CnProfessionId).OrderBy(x => x.EquipmentMaterialBigTypeCode);
                            foreach (var bigType in bigTypes2)
                            {
                                row5 = table5.NewRow();
                                row5[0] = v.ToString() + "." + w.ToString() + d.ToString();
                                row5[1] = v.ToString() + "." + w.ToString();
                                row5[2] = bigType.EquipmentMaterialBigTypeName;
                                var list = costControls.Where(x => x.EquipmentMaterialBigTypeId == bigType.EquipmentMaterialBigTypeId && x.InstallationId == ins.InstallationId);
                                if (list.Count() > 0)
                                {
                                    row5[3] = list.First().Unit;
                                    row5[4] = list.ToList().Sum(x => x.TotalNum ?? 0);
                                    var list2 = costControlDetails.Where(x => x.EquipmentMaterialBigTypeId == bigType.EquipmentMaterialBigTypeId && x.InstallationId == ins.InstallationId && x.Months == Funs.GetNewDateTime(date));
                                    row5[5] = list2.ToList().Sum(x => x.ThisNum ?? 0);
                                    var list3 = costControlDetails.Where(x => x.EquipmentMaterialBigTypeId == bigType.EquipmentMaterialBigTypeId && x.InstallationId == ins.InstallationId);
                                    row5[6] = list3.ToList().Sum(x => x.ThisNum ?? 0);
                                    if (row5[4].ToString() != "0" && row5[5].ToString() != "0")
                                    {
                                        row5[7] = (Funs.GetNewDecimalOrZero(row5[5].ToString()) / Funs.GetNewDecimalOrZero(row5[4].ToString()) * 100).ToString("0.##") + "%";
                                    }
                                    else
                                    {
                                        row5[7] = "/";
                                    }
                                    if (row5[4].ToString() != "0" && row5[6].ToString() != "0")
                                    {
                                        row5[8] = (Funs.GetNewDecimalOrZero(row5[6].ToString()) / Funs.GetNewDecimalOrZero(row5[4].ToString()) * 100).ToString("0.##") + "%";
                                    }
                                    else
                                    {
                                        row5[8] = "/";
                                    }
                                }
                                table5.Rows.Add(row5);
                                f = 1;
                                var types = equipmentMaterialTypes.Where(x => x.EquipmentMaterialBigTypeId == bigType.EquipmentMaterialBigTypeId).OrderBy(x => x.EquipmentMaterialTypeCode);
                                foreach (var equipmentMaterialType in types)
                                {
                                    row5 = table5.NewRow();
                                    row5[0] = v.ToString() + "." + w.ToString() + d.ToString() + "." + f.ToString();
                                    row5[1] = v.ToString() + "." + w.ToString() + d.ToString();
                                    row5[2] = equipmentMaterialType.EquipmentMaterialTypeName;
                                    var lists = costControls.Where(x => x.EquipmentMaterialTypeId == equipmentMaterialType.EquipmentMaterialTypeId && x.InstallationId == ins.InstallationId);
                                    if (lists.Count() > 0)
                                    {
                                        row5[3] = lists.First().Unit;
                                        row5[4] = lists.ToList().Sum(x => x.TotalNum ?? 0);
                                        var list2s = costControlDetails.Where(x => x.EquipmentMaterialTypeId == equipmentMaterialType.EquipmentMaterialTypeId && x.InstallationId == ins.InstallationId && x.Months == Funs.GetNewDateTime(date));
                                        row5[5] = list2s.ToList().Sum(x => x.ThisNum ?? 0);
                                        var list3s = costControlDetails.Where(x => x.EquipmentMaterialTypeId == equipmentMaterialType.EquipmentMaterialTypeId && x.InstallationId == ins.InstallationId);
                                        row5[6] = list3s.ToList().Sum(x => x.ThisNum ?? 0);
                                        if (row5[4].ToString() != "0" && row5[5].ToString() != "0")
                                        {
                                            row5[7] = (Funs.GetNewDecimalOrZero(row5[5].ToString()) / Funs.GetNewDecimalOrZero(row5[4].ToString()) * 100).ToString("0.##") + "%";
                                        }
                                        else
                                        {
                                            row5[7] = "/";
                                        }
                                        if (row5[4].ToString() != "0" && row5[6].ToString() != "0")
                                        {
                                            row5[8] = (Funs.GetNewDecimalOrZero(row5[6].ToString()) / Funs.GetNewDecimalOrZero(row5[4].ToString()) * 100).ToString("0.##") + "%";
                                        }
                                        else
                                        {
                                            row5[8] = "/";
                                        }
                                    }
                                    table5.Rows.Add(row5);
                                    f++;
                                }
                                d++;
                            }
                            w++;
                        }
                        v++;
                    }
                    if (table5.Rows.Count > 0)
                    {
                        this.Grid5.DataSource = table5;
                        this.Grid5.DataBind();
                    }
                }
            }
        }
        #endregion
        #region 查询
        /// 
        /// 查询按钮
        /// 
        /// 
        /// 
        protected void btnSearch_Click(object sender, EventArgs e)
        {
            GetValue();
        }
        #endregion
        #region 关闭弹出窗口
        /// 
        /// 关闭窗口
        /// 
        /// 
        /// 
        protected void Window1_Close(object sender, WindowCloseEventArgs e)
        {
            if (!string.IsNullOrEmpty(this.txtMonths.Text.Trim()))
            {
                GetValue();
            }
            else
            {
                ShowNotify("请选择月份", MessageBoxIcon.Warning);
            }
        }
        #endregion
        #region 导出按钮
        /// 导出按钮
        /// 
        /// 
        /// 
        protected void btnOut_Click(object sender, EventArgs e)
        {
            if (!string.IsNullOrEmpty(this.txtMonths.Text.Trim()))
            {
                Model.Project_Installation installation = BLL.Project_InstallationService.GetProjectInstallationByProjectId(this.CurrUser.LoginProjectId);
                if (installation != null && !string.IsNullOrEmpty(this.txtMonths.Text.Trim()))
                {
                    string id = installation.InstallationId;
                    string date = this.txtMonths.Text.Trim() + "-01";
                    string strSql = "select distinct (cast(YEAR(Months) as varchar(4))+'.'+cast(MONTH(Months) as varchar(2))) as 月份,t.Months," +
                                   "ThisRealCost as '本月已完工作实际费用-ACWP',ThisPlanCost as '本月已完工作预算费用-BCWP',ThisPlanValue as '本月计划工作预算费用-BCWS',TotalPlanValue as '累计计划工作预算费用-BCWS',TotalRealCost as '累计已完工作实际费用-ACWP',TotalPlanCost as '累计已完工作预算费用-BCWP' " +
                                   "from dbo.View_WBS_CostControlParentDetail as t where ParentId=@Id and t.Months<=@Months order by t.Months";
                    //string date = DateTime.Now.Year + "-" + DateTime.Now.Month + "-01";
                    SqlParameter[] parameter = new SqlParameter[]
                            {
                        new SqlParameter("@Id",id),
                        new SqlParameter("@Months",date),
                            };
                    DataTable dt = SQLHelper.GetDataTableRunText(strSql, parameter);
                    if (dt.Rows.Count > 0)
                    {
                        string rootPath = Server.MapPath("~/");
                        string initTemplatePath = string.Empty;
                        string uploadfilepath = string.Empty;
                        string newUrl = string.Empty;
                        string filePath = string.Empty;
                        Model.SGGLDB db = Funs.DB;
                        initTemplatePath = Const.JDReportTemplateUrl;
                        uploadfilepath = rootPath + initTemplatePath;
                        newUrl = uploadfilepath.Replace(".docx", "(" + this.txtMonths.Text.Trim() + ")" + ".docx");
                        if (File.Exists(newUrl))
                        {
                            File.Delete(newUrl);
                        }
                        File.Copy(uploadfilepath, newUrl);
                        //更新书签内容
                        Document doc = new Aspose.Words.Document(newUrl);
                        DocumentBuilder builder = new DocumentBuilder(doc);
                        string projectName = string.Empty;
                        var project = ProjectService.GetProjectByProjectId(this.CurrUser.LoginProjectId);
                        if (project != null)
                        {
                            projectName = project.ProjectName;
                        }
                        Bookmark bookmarkProjectName = doc.Range.Bookmarks["ProjectName"];
                        if (bookmarkProjectName != null)
                        {
                            bookmarkProjectName.Text = projectName;
                        }
                        Bookmark bookmarkMonths = doc.Range.Bookmarks["Months"];
                        if (bookmarkMonths != null)
                        {
                            string[] strs = this.txtMonths.Text.Trim().Split('-');
                            bookmarkMonths.Text = strs[0] + "年" + strs[1] + "月";
                        }
                        //插入图表
                        builder.MoveToBookmark("Chart");
                        Shape shape = builder.InsertChart(ChartType.Line, 432, 252);
                        Chart chart = shape.Chart;
                        chart.Title.Text = "赢得值曲线";
                        ChartSeriesCollection seriesColl = chart.Series;
                        seriesColl.Clear();
                        string[] categories = new string[dt.Rows.Count];
                        double[] d1 = new double[dt.Rows.Count];
                        double[] d2 = new double[dt.Rows.Count];
                        double[] d3 = new double[dt.Rows.Count];
                        for (int i = 0; i < dt.Rows.Count; i++)
                        {
                            categories[i] = dt.Rows[i]["月份"].ToString();
                            d1[i] = Convert.ToDouble(dt.Rows[i]["累计已完工作实际费用-ACWP"].ToString()) / 10000;
                            d2[i] = Convert.ToDouble(dt.Rows[i]["累计已完工作预算费用-BCWP"].ToString()) / 10000;
                            d3[i] = Convert.ToDouble(dt.Rows[i]["累计计划工作预算费用-BCWS"].ToString()) / 10000;
                        }
                        seriesColl.Add("累计已完工作实际费用-ACWP", categories, d1);
                        seriesColl.Add("累计已完工作预算费用-BCWP", categories, d2);
                        seriesColl.Add("累计计划工作预算费用-BCWS", categories, d3);
                        decimal BCWP = Funs.GetNewDecimalOrZero(dt.Rows[dt.Rows.Count - 1]["累计已完工作预算费用-BCWP"].ToString());
                        decimal BCWS = Funs.GetNewDecimalOrZero(dt.Rows[dt.Rows.Count - 1]["累计计划工作预算费用-BCWS"].ToString());
                        decimal ACWP = Funs.GetNewDecimalOrZero(dt.Rows[dt.Rows.Count - 1]["累计已完工作实际费用-ACWP"].ToString());
                        decimal mBCWP = Funs.GetNewDecimalOrZero(dt.Rows[dt.Rows.Count - 1]["本月已完工作预算费用-BCWP"].ToString());
                        decimal mBCWS = Funs.GetNewDecimalOrZero(dt.Rows[dt.Rows.Count - 1]["本月计划工作预算费用-BCWS"].ToString());
                        decimal mACWP = Funs.GetNewDecimalOrZero(dt.Rows[dt.Rows.Count - 1]["本月已完工作实际费用-ACWP"].ToString());
                        decimal CV = BCWP / 10000 - ACWP / 10000;
                        decimal SV = BCWP / 10000 - BCWS / 10000;
                        decimal CPI = 0;
                        if (ACWP > 0)
                        {
                            CPI = BCWP / ACWP;
                        }
                        decimal SPI = 0;
                        if (BCWS > 0)
                        {
                            SPI = BCWP / BCWS;
                        }
                        decimal mCV = mBCWP / 10000 - mACWP / 10000;
                        decimal mSV = mBCWP / 10000 - mBCWS / 10000;
                        decimal mCPI = 0;
                        if (mACWP > 0)
                        {
                            mCPI = mBCWP / mACWP;
                        }
                        decimal mSPI = 0;
                        if (mBCWS > 0)
                        {
                            mSPI = mBCWP / mBCWS;
                        }
                        #region 项目总体施工进度情况
                        //项目总体施工进度情况
                        builder.MoveToBookmark("Form2");
                        builder.StartTable();
                        builder.CellFormat.Borders.LineStyle = Aspose.Words.LineStyle.Single;
                        builder.CellFormat.Borders.Color = System.Drawing.Color.Black;
                        builder.Bold = false;
                        builder.RowFormat.Height = 20;
                        builder.Font.Size = 10;
                        //序号
                        //builder.InsertCell();
                        //builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
                        //builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
                        //builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
                        //builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
                        //builder.CellFormat.Width = 30;
                        //builder.Write("序号");
                        //赢得值参数(单位:万元)
                        builder.InsertCell();
                        builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
                        builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
                        builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
                        builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
                        builder.CellFormat.Width = 240;
                        builder.Write("赢得值参数(单位:万元)");
                        //赢得值评价指标
                        builder.InsertCell();
                        builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
                        builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
                        builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
                        builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
                        builder.CellFormat.Width = 320;
                        builder.Write("赢得值评价指标");
                        builder.EndRow();
                        //BCWP
                        builder.InsertCell();
                        builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
                        builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
                        builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
                        builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
                        builder.CellFormat.Width = 80;
                        builder.Write("BCWP");
                        //BCWS
                        builder.InsertCell();
                        builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
                        builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
                        builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
                        builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
                        builder.CellFormat.Width = 80;
                        builder.Write("BCWS");
                        //ACWP
                        builder.InsertCell();
                        builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
                        builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
                        builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
                        builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
                        builder.CellFormat.Width = 80;
                        builder.Write("ACWP");
                        //CV
                        builder.InsertCell();
                        builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
                        builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
                        builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
                        builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
                        builder.CellFormat.Width = 80;
                        builder.Write("CV");
                        //SV
                        builder.InsertCell();
                        builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
                        builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
                        builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
                        builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
                        builder.CellFormat.Width = 80;
                        builder.Write("SV");
                        //CPI
                        builder.InsertCell();
                        builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
                        builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
                        builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
                        builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
                        builder.CellFormat.Width = 80;
                        builder.Write("CPI");
                        //SPI
                        builder.InsertCell();
                        builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
                        builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
                        builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
                        builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
                        builder.CellFormat.Width = 80;
                        builder.Write("SPI");
                        builder.EndRow();
                        ////序号
                        //builder.InsertCell();
                        //builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
                        //builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
                        //builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
                        //builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
                        //builder.CellFormat.Width = 30;
                        //builder.Write(h.ToString());
                        //问题内容
                        //BCWP
                        builder.InsertCell();
                        builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
                        builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
                        builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
                        builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
                        builder.CellFormat.Width = 80;
                        builder.Write((BCWP / 10000).ToString("0.####"));
                        //BCWS
                        builder.InsertCell();
                        builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
                        builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
                        builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
                        builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
                        builder.CellFormat.Width = 80;
                        builder.Write((BCWS / 10000).ToString("0.####"));
                        //ACWP
                        builder.InsertCell();
                        builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
                        builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
                        builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
                        builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
                        builder.CellFormat.Width = 80;
                        builder.Write((ACWP / 10000).ToString("0.####"));
                        //CV
                        builder.InsertCell();
                        builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
                        builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
                        builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
                        builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
                        builder.CellFormat.Width = 80;
                        builder.Write(CV.ToString("0.####"));
                        //SV
                        builder.InsertCell();
                        builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
                        builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
                        builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
                        builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
                        builder.CellFormat.Width = 80;
                        builder.Write(SV.ToString("0.####"));
                        //CPI
                        builder.InsertCell();
                        builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
                        builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
                        builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
                        builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
                        builder.CellFormat.Width = 80;
                        builder.Write(CPI.ToString("0.####"));
                        //SPI
                        builder.InsertCell();
                        builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
                        builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
                        builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
                        builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
                        builder.CellFormat.Width = 80;
                        builder.Write(SPI.ToString("0.####"));
                        builder.EndRow();
                        #endregion
                        #region 本月施工进度情况
                        //本月施工进度情况
                        builder.MoveToBookmark("Form3");
                        builder.StartTable();
                        builder.CellFormat.Borders.LineStyle = Aspose.Words.LineStyle.Single;
                        builder.CellFormat.Borders.Color = System.Drawing.Color.Black;
                        builder.Bold = false;
                        builder.RowFormat.Height = 20;
                        builder.Font.Size = 10;
                        //序号
                        //builder.InsertCell();
                        //builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
                        //builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
                        //builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
                        //builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
                        //builder.CellFormat.Width = 30;
                        //builder.Write("序号");
                        //赢得值参数(单位:万元)
                        builder.InsertCell();
                        builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
                        builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
                        builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
                        builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
                        builder.CellFormat.Width = 240;
                        builder.Write("赢得值参数(单位:万元)");
                        //赢得值评价指标
                        builder.InsertCell();
                        builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
                        builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
                        builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
                        builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
                        builder.CellFormat.Width = 320;
                        builder.Write("赢得值评价指标");
                        builder.EndRow();
                        //BCWP
                        builder.InsertCell();
                        builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
                        builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
                        builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
                        builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
                        builder.CellFormat.Width = 80;
                        builder.Write("BCWP");
                        //BCWS
                        builder.InsertCell();
                        builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
                        builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
                        builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
                        builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
                        builder.CellFormat.Width = 80;
                        builder.Write("BCWS");
                        //ACWP
                        builder.InsertCell();
                        builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
                        builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
                        builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
                        builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
                        builder.CellFormat.Width = 80;
                        builder.Write("ACWP");
                        //CV
                        builder.InsertCell();
                        builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
                        builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
                        builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
                        builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
                        builder.CellFormat.Width = 80;
                        builder.Write("CV");
                        //SV
                        builder.InsertCell();
                        builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
                        builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
                        builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
                        builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
                        builder.CellFormat.Width = 80;
                        builder.Write("SV");
                        //CPI
                        builder.InsertCell();
                        builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
                        builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
                        builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
                        builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
                        builder.CellFormat.Width = 80;
                        builder.Write("CPI");
                        //SPI
                        builder.InsertCell();
                        builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
                        builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
                        builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
                        builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
                        builder.CellFormat.Width = 80;
                        builder.Write("SPI");
                        builder.EndRow();
                        //问题内容
                        //BCWP
                        builder.InsertCell();
                        builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
                        builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
                        builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
                        builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
                        builder.CellFormat.Width = 80;
                        builder.Write((mBCWP / 10000).ToString("0.####"));
                        //BCWS
                        builder.InsertCell();
                        builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
                        builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
                        builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
                        builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
                        builder.CellFormat.Width = 80;
                        builder.Write((mBCWS / 10000).ToString("0.####"));
                        //ACWP
                        builder.InsertCell();
                        builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
                        builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
                        builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
                        builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
                        builder.CellFormat.Width = 80;
                        builder.Write((mACWP / 10000).ToString("0.####"));
                        //CV
                        builder.InsertCell();
                        builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
                        builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
                        builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
                        builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
                        builder.CellFormat.Width = 80;
                        builder.Write(mCV.ToString("0.####"));
                        //SV
                        builder.InsertCell();
                        builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
                        builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
                        builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
                        builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
                        builder.CellFormat.Width = 80;
                        builder.Write(mSV.ToString("0.####"));
                        //CPI
                        builder.InsertCell();
                        builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
                        builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
                        builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
                        builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
                        builder.CellFormat.Width = 80;
                        builder.Write(mCPI.ToString("0.####"));
                        //SPI
                        builder.InsertCell();
                        builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
                        builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
                        builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
                        builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
                        builder.CellFormat.Width = 80;
                        builder.Write(mSPI.ToString("0.####"));
                        builder.EndRow();
                        #endregion
                        #region 专业和分部工程工程施工进度情况
                        //专业和分部工程工程施工进度情况
                        builder.MoveToBookmark("Form4");
                        builder.StartTable();
                        builder.CellFormat.Borders.LineStyle = Aspose.Words.LineStyle.Single;
                        builder.CellFormat.Borders.Color = System.Drawing.Color.Black;
                        builder.Bold = false;
                        builder.RowFormat.Height = 20;
                        builder.Font.Size = 10;
                        //序号
                        builder.InsertCell();
                        builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.First;
                        builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
                        builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
                        builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
                        builder.CellFormat.Width = 30;
                        builder.Write("序号");
                        //专业
                        builder.InsertCell();
                        builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.First;
                        builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
                        builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
                        builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
                        builder.CellFormat.Width = 50;
                        builder.Write("专业");
                        //分部工程
                        builder.InsertCell();
                        builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.First;
                        builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
                        builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
                        builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
                        builder.CellFormat.Width = 60;
                        builder.Write("分部工程");
                        //本月赢得值参数(单位:万元)
                        builder.InsertCell();
                        builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
                        builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
                        builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
                        builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
                        builder.CellFormat.Width = 150;
                        builder.Write("本月赢得值参数(单位:万元)");
                        //本月赢得值评价指标
                        builder.InsertCell();
                        builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
                        builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
                        builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
                        builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
                        builder.CellFormat.Width = 200;
                        builder.Write("本月赢得值评价指标");
                        builder.EndRow();
                        //序号
                        builder.InsertCell();
                        builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.Previous;
                        builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
                        builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
                        builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
                        builder.CellFormat.Width = 30;
                        builder.Write("序号");
                        //专业
                        builder.InsertCell();
                        builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.Previous;
                        builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
                        builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
                        builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
                        builder.CellFormat.Width = 50;
                        builder.Write("专业");
                        //分部工程
                        builder.InsertCell();
                        builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.Previous;
                        builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
                        builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
                        builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
                        builder.CellFormat.Width = 60;
                        builder.Write("分部工程");
                        //BCWP
                        builder.InsertCell();
                        builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
                        builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
                        builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
                        builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
                        builder.CellFormat.Width = 50;
                        builder.Write("BCWP");
                        //BCWS
                        builder.InsertCell();
                        builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
                        builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
                        builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
                        builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
                        builder.CellFormat.Width = 50;
                        builder.Write("BCWS");
                        //ACWP
                        builder.InsertCell();
                        builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
                        builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
                        builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
                        builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
                        builder.CellFormat.Width = 50;
                        builder.Write("ACWP");
                        //CV
                        builder.InsertCell();
                        builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
                        builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
                        builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
                        builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
                        builder.CellFormat.Width = 50;
                        builder.Write("CV");
                        //SV
                        builder.InsertCell();
                        builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
                        builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
                        builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
                        builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
                        builder.CellFormat.Width = 50;
                        builder.Write("SV");
                        //CPI 
                        builder.InsertCell();
                        builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
                        builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
                        builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
                        builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
                        builder.CellFormat.Width = 50;
                        builder.Write("CPI");
                        //SPI
                        builder.InsertCell();
                        builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
                        builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
                        builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
                        builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
                        builder.CellFormat.Width = 50;
                        builder.Write("SPI");
                        builder.EndRow();
                        var cnProfessionInits = from x in db.WBS_CnProfessionInit select x;
                        var cnProfessions = from x in db.WBS_CnProfession where x.ProjectId == this.CurrUser.LoginProjectId select x;
                        var unitProjectInits = from x in db.Wbs_UnitProjectInit select x;
                        var unitProjects = from x in db.Wbs_UnitProject where x.ProjectId == this.CurrUser.LoginProjectId select x;
                        var details = from x in db.View_WBS_CostControlParentDetail
                                      where x.Months == Funs.GetNewDateTime(date)
                                      select x;
                        decimal cnACWP, cnBCWP, cnBCWS, cnmACWP, cnmBCWP, cnmBCWS, cnCV, cnSV, cnCPI, cnSPI, cnmCV, cnmSV, cnmCPI, cnmSPI,
                            unACWP, unBCWP, unBCWS, unmACWP, unmBCWP, unmBCWS, unCV, unSV, unCPI, unSPI, unmCV, unmSV, unmCPI, unmSPI;
                        int a = 1, b = 1;
                        foreach (var cn in cnProfessionInits)
                        {
                            cnmACWP = 0;
                            cnmBCWP = 0;
                            cnmBCWS = 0;
                            cnmCV = 0;
                            cnmSV = 0;
                            cnmCPI = 0;
                            cnmSPI = 0;
                            //序号
                            builder.InsertCell();
                            builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
                            builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
                            builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
                            builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
                            builder.CellFormat.Width = 30;
                            builder.Write(a.ToString());
                            //专业
                            builder.InsertCell();
                            builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
                            builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
                            builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
                            builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
                            builder.CellFormat.Width = 50;
                            builder.Write(cn.CnProfessionName);
                            //分部工程
                            builder.InsertCell();
                            builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
                            builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
                            builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
                            builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
                            builder.CellFormat.Width = 60;
                            builder.Write(string.Empty);
                            var cnDetails = (from x in details
                                             join y in cnProfessions on x.ParentId equals y.CnProfessionId
                                             where y.OldId == cn.CnProfessionId
                                             select x).ToList();
                            cnmACWP = Funs.GetNewDecimalOrZero(cnDetails.Select(x => x.ThisRealCost).Sum().ToString()) / 10000;
                            cnmBCWP = Funs.GetNewDecimalOrZero(cnDetails.Select(x => x.ThisPlanCost).Sum().ToString()) / 10000;
                            cnmBCWS = Funs.GetNewDecimalOrZero(cnDetails.Select(x => x.ThisPlanValue).Sum().ToString()) / 10000;
                            cnmCV = cnmBCWP - cnmACWP;
                            cnmSV = cnmBCWP - cnmBCWS;
                            if (cnmACWP > 0)
                            {
                                cnmCPI = cnmBCWP / cnmACWP;
                            }
                            if (cnmBCWS > 0)
                            {
                                cnmSPI = cnmBCWP / cnmBCWS;
                            }
                            //BCWP
                            builder.InsertCell();
                            builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
                            builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
                            builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
                            builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
                            builder.CellFormat.Width = 50;
                            builder.Write(cnmBCWP.ToString("0.####"));
                            //BCWS
                            builder.InsertCell();
                            builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
                            builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
                            builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
                            builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
                            builder.CellFormat.Width = 50;
                            builder.Write(cnmBCWS.ToString("0.####"));
                            //ACWP
                            builder.InsertCell();
                            builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
                            builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
                            builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
                            builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
                            builder.CellFormat.Width = 50;
                            builder.Write(cnmACWP.ToString("0.####"));
                            //CV
                            builder.InsertCell();
                            builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
                            builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
                            builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
                            builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
                            builder.CellFormat.Width = 50;
                            builder.Write(cnmCV.ToString("0.####"));
                            //SV
                            builder.InsertCell();
                            builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
                            builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
                            builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
                            builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
                            builder.CellFormat.Width = 50;
                            builder.Write(cnmSV.ToString("0.####"));
                            //CPI
                            builder.InsertCell();
                            builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
                            builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
                            builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
                            builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
                            builder.CellFormat.Width = 50;
                            builder.Write(cnmCPI.ToString("0.####"));
                            //SPI
                            builder.InsertCell();
                            builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
                            builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
                            builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
                            builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
                            builder.CellFormat.Width = 50;
                            builder.Write(cnmSPI.ToString("0.####"));
                            builder.EndRow();
                            b = 1;
                            var unLists = (from x in unitProjectInits where x.CnProfessionId == cn.CnProfessionId orderby x.SortIndex select x).ToList();
                            foreach (var un in unLists)
                            {
                                unmACWP = 0;
                                unmBCWP = 0;
                                unmBCWS = 0;
                                unmCV = 0;
                                unmSV = 0;
                                unmCPI = 0;
                                unmSPI = 0;
                                //序号
                                builder.InsertCell();
                                builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
                                builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
                                builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
                                builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
                                builder.CellFormat.Width = 30;
                                builder.Write(a.ToString() + "." + b.ToString());
                                //专业
                                builder.InsertCell();
                                builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
                                builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
                                builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
                                builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
                                builder.CellFormat.Width = 50;
                                builder.Write(string.Empty);
                                //分部工程
                                builder.InsertCell();
                                builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
                                builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
                                builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
                                builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
                                builder.CellFormat.Width = 60;
                                builder.Write(un.UnitProjectName);
                                var unDetails = from x in details
                                                join y in unitProjects on x.ParentId equals y.UnitProjectId
                                                where y.UnitProjectCode == un.UnitProjectCode
                                                select x;
                                unmACWP = Funs.GetNewDecimalOrZero(unDetails.Select(x => x.ThisRealCost).Sum().ToString()) / 10000;
                                unmBCWP = Funs.GetNewDecimalOrZero(unDetails.Select(x => x.ThisPlanCost).Sum().ToString()) / 10000;
                                unmBCWS = Funs.GetNewDecimalOrZero(unDetails.Select(x => x.ThisPlanValue).Sum().ToString()) / 10000;
                                unmCV = unmBCWP - unmACWP;
                                unmSV = unmBCWP - unmBCWS;
                                if (unmACWP > 0)
                                {
                                    unmCPI = unmBCWP / unmACWP;
                                }
                                if (unmBCWS > 0)
                                {
                                    unmSPI = unmBCWP / unmBCWS;
                                }
                                //BCWP
                                builder.InsertCell();
                                builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
                                builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
                                builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
                                builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
                                builder.CellFormat.Width = 50;
                                builder.Write(unmBCWP.ToString("0.####"));
                                //BCWS
                                builder.InsertCell();
                                builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
                                builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
                                builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
                                builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
                                builder.CellFormat.Width = 50;
                                builder.Write(unmBCWS.ToString("0.####"));
                                //ACWP
                                builder.InsertCell();
                                builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
                                builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
                                builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
                                builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
                                builder.CellFormat.Width = 50;
                                builder.Write(unmACWP.ToString("0.####"));
                                //CV
                                builder.InsertCell();
                                builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
                                builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
                                builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
                                builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
                                builder.CellFormat.Width = 50;
                                builder.Write(unmCV.ToString("0.####"));
                                //SV
                                builder.InsertCell();
                                builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
                                builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
                                builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
                                builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
                                builder.CellFormat.Width = 50;
                                builder.Write(unmSV.ToString("0.####"));
                                //CPI
                                builder.InsertCell();
                                builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
                                builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
                                builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
                                builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
                                builder.CellFormat.Width = 50;
                                builder.Write(unmCPI.ToString("0.####"));
                                //SPI
                                builder.InsertCell();
                                builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
                                builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
                                builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
                                builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
                                builder.CellFormat.Width = 50;
                                builder.Write(unmSPI.ToString("0.####"));
                                builder.EndRow();
                                b++;
                            }
                            a++;
                        }
                        builder.MoveToBookmark("Form42");
                        builder.StartTable();
                        builder.CellFormat.Borders.LineStyle = Aspose.Words.LineStyle.Single;
                        builder.CellFormat.Borders.Color = System.Drawing.Color.Black;
                        builder.Bold = false;
                        builder.RowFormat.Height = 20;
                        builder.Font.Size = 10;
                        //序号
                        builder.InsertCell();
                        builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.First;
                        builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
                        builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
                        builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
                        builder.CellFormat.Width = 30;
                        builder.Write("序号");
                        //专业
                        builder.InsertCell();
                        builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.First;
                        builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
                        builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
                        builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
                        builder.CellFormat.Width = 50;
                        builder.Write("专业");
                        //分部工程
                        builder.InsertCell();
                        builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.First;
                        builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
                        builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
                        builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
                        builder.CellFormat.Width = 60;
                        builder.Write("分部工程");
                        //累计赢得值参数(单位:万元)
                        builder.InsertCell();
                        builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
                        builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
                        builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
                        builder.CellFormat.VerticalMerge = CellMerge.None;
                        builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
                        builder.CellFormat.Width = 150;
                        builder.Write("累计赢得值参数(单位:万元)");
                        //累计赢得值评价指标
                        builder.InsertCell();
                        builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
                        builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
                        builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
                        builder.CellFormat.VerticalMerge = CellMerge.None;
                        builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
                        builder.CellFormat.Width = 200;
                        builder.Write("累计赢得值评价指标");
                        builder.EndRow();
                        //序号
                        builder.InsertCell();
                        builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.Previous;
                        builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
                        builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
                        builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
                        builder.CellFormat.Width = 30;
                        builder.Write("序号");
                        //专业
                        builder.InsertCell();
                        builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.Previous;
                        builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
                        builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
                        builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
                        builder.CellFormat.Width = 50;
                        builder.Write("专业");
                        //分部工程
                        builder.InsertCell();
                        builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.Previous;
                        builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
                        builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
                        builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
                        builder.CellFormat.Width = 60;
                        builder.Write("分部工程");
                        //BCWP
                        builder.InsertCell();
                        builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
                        builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
                        builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
                        builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
                        builder.CellFormat.Width = 50;
                        builder.Write("BCWP");
                        //BCWS
                        builder.InsertCell();
                        builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
                        builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
                        builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
                        builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
                        builder.CellFormat.Width = 50;
                        builder.Write("BCWS");
                        //ACWP
                        builder.InsertCell();
                        builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
                        builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
                        builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
                        builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
                        builder.CellFormat.Width = 50;
                        builder.Write("ACWP");
                        //CV
                        builder.InsertCell();
                        builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
                        builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
                        builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
                        builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
                        builder.CellFormat.Width = 50;
                        builder.Write("CV");
                        //SV
                        builder.InsertCell();
                        builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
                        builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
                        builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
                        builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
                        builder.CellFormat.Width = 50;
                        builder.Write("SV");
                        //CPI 
                        builder.InsertCell();
                        builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
                        builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
                        builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
                        builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
                        builder.CellFormat.Width = 50;
                        builder.Write("CPI");
                        //SPI
                        builder.InsertCell();
                        builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
                        builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
                        builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
                        builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
                        builder.CellFormat.Width = 50;
                        builder.Write("SPI");
                        builder.EndRow();
                        a = 1;
                        b = 1;
                        foreach (var cn in cnProfessionInits)
                        {
                            cnACWP = 0;
                            cnBCWP = 0;
                            cnBCWS = 0;
                            cnCV = 0;
                            cnSV = 0;
                            cnCPI = 0;
                            cnSPI = 0;
                            //序号
                            builder.InsertCell();
                            builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
                            builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
                            builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
                            builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
                            builder.CellFormat.Width = 30;
                            builder.Write(a.ToString());
                            //专业
                            builder.InsertCell();
                            builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
                            builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
                            builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
                            builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
                            builder.CellFormat.Width = 50;
                            builder.Write(cn.CnProfessionName);
                            //分部工程
                            builder.InsertCell();
                            builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
                            builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
                            builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
                            builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
                            builder.CellFormat.Width = 60;
                            builder.Write(string.Empty);
                            var cnDetails = (from x in details
                                             join y in cnProfessions on x.ParentId equals y.CnProfessionId
                                             where y.OldId == cn.CnProfessionId
                                             select x).ToList();
                            cnmACWP = Funs.GetNewDecimalOrZero(cnDetails.Select(x => x.ThisRealCost).Sum().ToString()) / 10000;
                            cnmBCWP = Funs.GetNewDecimalOrZero(cnDetails.Select(x => x.ThisPlanCost).Sum().ToString()) / 10000;
                            cnmBCWS = Funs.GetNewDecimalOrZero(cnDetails.Select(x => x.ThisPlanValue).Sum().ToString()) / 10000;
                            cnmCV = cnmBCWP - cnmACWP;
                            cnmSV = cnmBCWP - cnmBCWS;
                            if (cnmACWP > 0)
                            {
                                cnmCPI = cnmBCWP / cnmACWP;
                            }
                            if (cnmBCWS > 0)
                            {
                                cnmSPI = cnmBCWP / cnmBCWS;
                            }
                            cnACWP = Funs.GetNewDecimalOrZero(cnDetails.Select(x => x.TotalRealCost).Sum().ToString()) / 10000;
                            cnBCWP = Funs.GetNewDecimalOrZero(cnDetails.Select(x => x.TotalPlanCost).Sum().ToString()) / 10000;
                            cnBCWS = Funs.GetNewDecimalOrZero(cnDetails.Select(x => x.TotalPlanValue).Sum().ToString()) / 10000;
                            cnCV = cnBCWP - cnACWP;
                            cnSV = cnBCWP - cnBCWS;
                            if (cnACWP > 0)
                            {
                                cnCPI = cnBCWP / cnACWP;
                            }
                            if (cnBCWS > 0)
                            {
                                cnSPI = cnBCWP / cnBCWS;
                            }
                            //BCWP
                            builder.InsertCell();
                            builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
                            builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
                            builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
                            builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
                            builder.CellFormat.Width = 50;
                            builder.Write(cnBCWP.ToString("0.####"));
                            //BCWS
                            builder.InsertCell();
                            builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
                            builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
                            builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
                            builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
                            builder.CellFormat.Width = 50;
                            builder.Write(cnBCWS.ToString("0.####"));
                            //ACWP
                            builder.InsertCell();
                            builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
                            builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
                            builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
                            builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
                            builder.CellFormat.Width = 50;
                            builder.Write(cnACWP.ToString("0.####"));
                            //CV
                            builder.InsertCell();
                            builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
                            builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
                            builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
                            builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
                            builder.CellFormat.Width = 50;
                            builder.Write(cnCV.ToString("0.####"));
                            //SV
                            builder.InsertCell();
                            builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
                            builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
                            builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
                            builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
                            builder.CellFormat.Width = 50;
                            builder.Write(cnSV.ToString("0.####"));
                            //CPI
                            builder.InsertCell();
                            builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
                            builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
                            builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
                            builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
                            builder.CellFormat.Width = 50;
                            builder.Write(cnCPI.ToString("0.####"));
                            //SPI
                            builder.InsertCell();
                            builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
                            builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
                            builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
                            builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
                            builder.CellFormat.Width = 50;
                            builder.Write(cnSPI.ToString("0.####"));
                            builder.EndRow();
                            b = 1;
                            var unLists = (from x in unitProjectInits where x.CnProfessionId == cn.CnProfessionId orderby x.SortIndex select x).ToList();
                            foreach (var un in unLists)
                            {
                                unACWP = 0;
                                unBCWP = 0;
                                unBCWS = 0;
                                unCV = 0;
                                unSV = 0;
                                unCPI = 0;
                                unSPI = 0;
                                //序号
                                builder.InsertCell();
                                builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
                                builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
                                builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
                                builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
                                builder.CellFormat.Width = 30;
                                builder.Write(a.ToString() + "." + b.ToString());
                                //专业
                                builder.InsertCell();
                                builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
                                builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
                                builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
                                builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
                                builder.CellFormat.Width = 50;
                                builder.Write(string.Empty);
                                //分部工程
                                builder.InsertCell();
                                builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
                                builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
                                builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
                                builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
                                builder.CellFormat.Width = 60;
                                builder.Write(un.UnitProjectName);
                                var unDetails = from x in details
                                                join y in unitProjects on x.ParentId equals y.UnitProjectId
                                                where y.UnitProjectCode == un.UnitProjectCode
                                                select x;
                                unACWP = Funs.GetNewDecimalOrZero(unDetails.Select(x => x.TotalRealCost).Sum().ToString()) / 10000;
                                unBCWP = Funs.GetNewDecimalOrZero(unDetails.Select(x => x.TotalPlanCost).Sum().ToString()) / 10000;
                                unBCWS = Funs.GetNewDecimalOrZero(unDetails.Select(x => x.TotalPlanValue).Sum().ToString()) / 10000;
                                unCV = unBCWP - unACWP;
                                unSV = unBCWP - unBCWS;
                                if (unACWP > 0)
                                {
                                    unCPI = unBCWP / unACWP;
                                }
                                if (unBCWS > 0)
                                {
                                    unSPI = unBCWP / unBCWS;
                                }
                                //BCWP
                                builder.InsertCell();
                                builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
                                builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
                                builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
                                builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
                                builder.CellFormat.Width = 50;
                                builder.Write(unBCWP.ToString("0.####"));
                                //BCWS
                                builder.InsertCell();
                                builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
                                builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
                                builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
                                builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
                                builder.CellFormat.Width = 50;
                                builder.Write(unBCWS.ToString("0.####"));
                                //ACWP
                                builder.InsertCell();
                                builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
                                builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
                                builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
                                builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
                                builder.CellFormat.Width = 50;
                                builder.Write(unACWP.ToString("0.####"));
                                //CV
                                builder.InsertCell();
                                builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
                                builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
                                builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
                                builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
                                builder.CellFormat.Width = 50;
                                builder.Write(unCV.ToString("0.####"));
                                //SV
                                builder.InsertCell();
                                builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
                                builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
                                builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
                                builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
                                builder.CellFormat.Width = 50;
                                builder.Write(unSV.ToString("0.####"));
                                //CPI
                                builder.InsertCell();
                                builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
                                builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
                                builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
                                builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
                                builder.CellFormat.Width = 50;
                                builder.Write(unCPI.ToString("0.####"));
                                //SPI
                                builder.InsertCell();
                                builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
                                builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.First;
                                builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐
                                builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐
                                builder.CellFormat.Width = 50;
                                builder.Write(unSPI.ToString("0.####"));
                                builder.EndRow();
                                b++;
                            }
                            a++;
                        }
                        #endregion
                        doc.Save(newUrl);
                        string fileName = Path.GetFileName(newUrl);
                        FileInfo info = new FileInfo(newUrl);
                        long fileSize = info.Length;
                        Response.Clear();
                        Response.ContentType = "application/x-zip-compressed";
                        Response.AddHeader("Content-Disposition", "attachment;filename=" + System.Web.HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8));
                        Response.AddHeader("Content-Length", fileSize.ToString());
                        Response.TransmitFile(newUrl, 0, fileSize);
                        Response.Flush();
                        Response.Close();
                        File.Delete(newUrl);
                    }
                    else
                    {
                        ShowNotify("没有数据,无法导出!", MessageBoxIcon.Warning);
                    }
                }
            }
            else
            {
                ShowNotify("请选择月份!", MessageBoxIcon.Warning);
            }
        }
        #endregion
        #region 导出(excel按钮)
        protected void btnOutExcel_Click(object sender, EventArgs e)
        {
            if (!string.IsNullOrEmpty(this.txtMonths.Text.Trim()))
            {
                Model.Project_Installation installation = BLL.Project_InstallationService.GetProjectInstallationByProjectId(this.CurrUser.LoginProjectId);
                if (installation != null && !string.IsNullOrEmpty(this.txtMonths.Text.Trim()))
                {
                    string id = installation.InstallationId;
                    string date = this.txtMonths.Text.Trim() + "-01";
                    string strSql = "select distinct (cast(YEAR(Months) as varchar(4))+'.'+cast(MONTH(Months) as varchar(2))) as 月份,t.Months," +
                                   "ThisRealCost as '本月已完工作实际费用-ACWP',ThisPlanCost as '本月已完工作预算费用-BCWP',ThisPlanValue as '本月计划工作预算费用-BCWS',TotalPlanValue as '累计计划工作预算费用-BCWS',TotalRealCost as '累计已完工作实际费用-ACWP',TotalPlanCost as '累计已完工作预算费用-BCWP' " +
                                   "from dbo.View_WBS_CostControlParentDetail as t where ParentId=@Id and t.Months<=@Months order by t.Months";
                    //string date = DateTime.Now.Year + "-" + DateTime.Now.Month + "-01";
                    SqlParameter[] parameter = new SqlParameter[]
                            {
                        new SqlParameter("@Id",id),
                        new SqlParameter("@Months",date),
                            };
                    DataTable dt = SQLHelper.GetDataTableRunText(strSql, parameter);
                    if (dt.Rows.Count > 0)
                    {
                        try
                        {
                            decimal BCWP = Funs.GetNewDecimalOrZero(dt.Rows[dt.Rows.Count - 1]["累计已完工作预算费用-BCWP"].ToString());
                            decimal BCWS = Funs.GetNewDecimalOrZero(dt.Rows[dt.Rows.Count - 1]["累计计划工作预算费用-BCWS"].ToString());
                            decimal ACWP = Funs.GetNewDecimalOrZero(dt.Rows[dt.Rows.Count - 1]["累计已完工作实际费用-ACWP"].ToString());
                            decimal mBCWP = Funs.GetNewDecimalOrZero(dt.Rows[dt.Rows.Count - 1]["本月已完工作预算费用-BCWP"].ToString());
                            decimal mBCWS = Funs.GetNewDecimalOrZero(dt.Rows[dt.Rows.Count - 1]["本月计划工作预算费用-BCWS"].ToString());
                            decimal mACWP = Funs.GetNewDecimalOrZero(dt.Rows[dt.Rows.Count - 1]["本月已完工作实际费用-ACWP"].ToString());
                            decimal CV = BCWP / 10000 - ACWP / 10000;
                            decimal SV = BCWP / 10000 - BCWS / 10000;
                            decimal CPI = 0;
                            if (ACWP > 0)
                            {
                                CPI = BCWP / ACWP;
                            }
                            decimal SPI = 0;
                            if (BCWS > 0)
                            {
                                SPI = BCWP / BCWS;
                            }
                            decimal mCV = mBCWP / 10000 - mACWP / 10000;
                            decimal mSV = mBCWP / 10000 - mBCWS / 10000;
                            decimal mCPI = 0;
                            if (mACWP > 0)
                            {
                                mCPI = mBCWP / mACWP;
                            }
                            decimal mSPI = 0;
                            if (mBCWS > 0)
                            {
                                mSPI = mBCWP / mBCWS;
                            }
                            string rootPath = Server.MapPath("~/");
                            string initTemplatePath = string.Empty;
                            string uploadfilepath = string.Empty;
                            string newUrl = string.Empty;
                            string filePath = string.Empty;
                            initTemplatePath = Const.JDreportReportTemplateUrl;
                            uploadfilepath = rootPath + initTemplatePath;
                            newUrl = uploadfilepath.Replace(".xls", "(" + this.txtMonths.Text.Trim() + ")" + ".xls");
                            File.Copy(uploadfilepath, newUrl);
                            // 第一步:读取文件流
                            NPOI.SS.UserModel.IWorkbook workbook;
                            using (FileStream stream = new FileStream(newUrl, FileMode.Open, FileAccess.Read))
                            {
                                workbook = new NPOI.HSSF.UserModel.HSSFWorkbook(stream);
                            }
                            // 创建单元格样式
                            NPOI.SS.UserModel.ICellStyle cellStyle0 = workbook.CreateCellStyle();
                            cellStyle0.BorderTop = NPOI.SS.UserModel.BorderStyle.None;
                            cellStyle0.BorderRight = NPOI.SS.UserModel.BorderStyle.None;
                            cellStyle0.BorderBottom = NPOI.SS.UserModel.BorderStyle.None;
                            cellStyle0.BorderLeft = NPOI.SS.UserModel.BorderStyle.None;
                            cellStyle0.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Center;
                            cellStyle0.VerticalAlignment = NPOI.SS.UserModel.VerticalAlignment.Center;
                            var font = workbook.CreateFont();
                            font.FontHeightInPoints = 12;
                            font.IsBold = true;
                            //font.FontHeightInPoints = (short)8.5;字号为小数时要转为short
                            cellStyle0.SetFont(font);
                            // 第二步:创建新数据行
                            NPOI.SS.UserModel.ISheet sheet = workbook.GetSheet("Sheet1");
                            NPOI.SS.UserModel.IRow row1 = sheet.CreateRow(1);
                            NPOI.SS.UserModel.ICell cell2;
                            // 添加测试数据
                            cell2 = row1.CreateCell(14);
                            cell2.CellStyle = cellStyle0;
                            cell2.SetCellValue("123");
                            var font2 = workbook.CreateFont();
                            font2.FontHeightInPoints = 10;
                            // 创建单元格样式
                            NPOI.SS.UserModel.ICellStyle cellStyle1 = workbook.CreateCellStyle();
                            cellStyle1.BorderTop = NPOI.SS.UserModel.BorderStyle.None;
                            cellStyle1.BorderRight = NPOI.SS.UserModel.BorderStyle.None;
                            cellStyle1.BorderBottom = NPOI.SS.UserModel.BorderStyle.Thin;
                            cellStyle1.BorderLeft = NPOI.SS.UserModel.BorderStyle.Thin;
                            cellStyle1.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Center;
                            cellStyle1.VerticalAlignment = NPOI.SS.UserModel.VerticalAlignment.Center;
                            var font3 = workbook.CreateFont();
                            font3.FontHeightInPoints = 14;
                            cellStyle1.SetFont(font3);
                            NPOI.SS.UserModel.ICellStyle cellStyle2 = workbook.CreateCellStyle();
                            cellStyle2.BorderTop = NPOI.SS.UserModel.BorderStyle.None;
                            cellStyle2.BorderRight = NPOI.SS.UserModel.BorderStyle.None;
                            cellStyle2.BorderBottom = NPOI.SS.UserModel.BorderStyle.None;
                            cellStyle2.BorderLeft = NPOI.SS.UserModel.BorderStyle.None;
                            cellStyle2.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Center;
                            cellStyle2.VerticalAlignment = NPOI.SS.UserModel.VerticalAlignment.Center;
                            cellStyle2.SetFont(font3);
                            int rowCount = 1;
                            #region 一、项目赢得值曲线
                            NPOI.SS.UserModel.IRow row = sheet.CreateRow(rowCount);
                            NPOI.SS.UserModel.ICell cell;
                            cell = row.CreateCell(0);
                            cell.CellStyle = cellStyle2;
                            cell.SetCellValue("一、项目赢得值曲线");
                            CellRangeAddress region = new CellRangeAddress(rowCount, rowCount, 0, 16);
                            sheet.AddMergedRegion(region);
                            cell = row.CreateCell(38);
                            cell.CellStyle = cellStyle1;
                            cell.SetCellValue("月份");
                            cell = row.CreateCell(39);
                            cell.CellStyle = cellStyle1;
                            cell.SetCellValue("累计已完工作实际费用-ACWP");
                            cell = row.CreateCell(40);
                            cell.CellStyle = cellStyle1;
                            cell.SetCellValue("累计已完工作预算费用-BCWP");
                            cell = row.CreateCell(41);
                            cell.CellStyle = cellStyle1;
                            cell.SetCellValue("累计计划工作预算费用-BCWS");
                            rowCount += 1;
                            for (int i = 0; i < dt.Rows.Count; i++)
                            {
                                //获取当前行row = sheet.Row(nowRowNum);
                                row = sheet.CreateRow(rowCount);
                                //给行的单元格填充数据
                                row.CreateCell(38).SetCellValue(dt.Rows[i]["月份"].ToString());
                                row.CreateCell(39).SetCellValue(Convert.ToDouble(dt.Rows[i]["累计已完工作实际费用-ACWP"].ToString()) / 10000);
                                row.CreateCell(40).SetCellValue(Convert.ToDouble(dt.Rows[i]["累计已完工作预算费用-BCWP"].ToString()) / 10000);
                                row.CreateCell(41).SetCellValue(Convert.ToDouble(dt.Rows[i]["累计计划工作预算费用-BCWS"].ToString()) / 10000);
                                rowCount++;
                            }
                            rowCount = 29;
                            #endregion
                            #region 二、项目总体施工进度情况
                            //项目总体施工进度情况
                            row = sheet.CreateRow(rowCount);
                            cell = row.CreateCell(0);
                            cell.CellStyle = cellStyle1;
                            cell.SetCellValue("二、项目总体施工进度情况");
                            region = new CellRangeAddress(rowCount, rowCount, 0, 6);
                            sheet.AddMergedRegion(region);
                            rowCount += 1;
                            // 创建单元格样式
                            NPOI.SS.UserModel.ICellStyle cellStyle = workbook.CreateCellStyle();
                            cellStyle.BorderTop = NPOI.SS.UserModel.BorderStyle.Thin;
                            cellStyle.BorderRight = NPOI.SS.UserModel.BorderStyle.Thin;
                            cellStyle.BorderBottom = NPOI.SS.UserModel.BorderStyle.Thin;
                            cellStyle.BorderLeft = NPOI.SS.UserModel.BorderStyle.Thin;
                            cellStyle.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Center;
                            cellStyle.VerticalAlignment = NPOI.SS.UserModel.VerticalAlignment.Center;
                            cellStyle.SetFont(font2);
                            //赢得值参数(单位:万元)
                            row = sheet.CreateRow(rowCount);
                            cell = row.CreateCell(0);
                            cell.CellStyle = cellStyle;
                            cell.SetCellValue("赢得值参数(单位:万元)");
                            cell = row.CreateCell(1);
                            cell.CellStyle = cellStyle;
                            cell.SetCellValue("");
                            cell = row.CreateCell(2);
                            cell.CellStyle = cellStyle;
                            cell.SetCellValue("");
                            region = new CellRangeAddress(rowCount, rowCount, 0, 2);
                            sheet.AddMergedRegion(region);
                            //赢得值评价指标
                            cell = row.CreateCell(3);
                            cell.CellStyle = cellStyle;
                            cell.SetCellValue("赢得值评价指标");
                            cell = row.CreateCell(4);
                            cell.CellStyle = cellStyle;
                            cell.SetCellValue("");
                            cell = row.CreateCell(5);
                            cell.CellStyle = cellStyle;
                            cell.SetCellValue("");
                            cell = row.CreateCell(6);
                            cell.CellStyle = cellStyle;
                            cell.SetCellValue("");
                            region = new CellRangeAddress(rowCount, rowCount, 3, 6);
                            sheet.AddMergedRegion(region);
                            rowCount += 1;
                            //BCWP
                            row = sheet.CreateRow(rowCount);
                            cell = row.CreateCell(0);
                            cell.CellStyle = cellStyle;
                            cell.SetCellValue("BCWP");
                            //BCWS
                            cell = row.CreateCell(1);
                            cell.CellStyle = cellStyle;
                            cell.SetCellValue("BCWS");
                            //ACWP
                            cell = row.CreateCell(2);
                            cell.CellStyle = cellStyle;
                            cell.SetCellValue("ACWP");
                            //CV
                            cell = row.CreateCell(3);
                            cell.CellStyle = cellStyle;
                            cell.SetCellValue("CV");
                            //SV
                            cell = row.CreateCell(4);
                            cell.CellStyle = cellStyle;
                            cell.SetCellValue("SV");
                            //CPI
                            cell = row.CreateCell(5);
                            cell.CellStyle = cellStyle;
                            cell.SetCellValue("CPI");
                            //SPI
                            cell = row.CreateCell(6);
                            cell.CellStyle = cellStyle;
                            cell.SetCellValue("SPI");
                            //数值
                            //BCWP
                            rowCount += 1;
                            row = sheet.CreateRow(rowCount);
                            cell = row.CreateCell(0);
                            cell.CellStyle = cellStyle;
                            cell.SetCellValue((BCWP / 10000).ToString("0.####"));
                            //BCWS
                            cell = row.CreateCell(1);
                            cell.CellStyle = cellStyle;
                            cell.SetCellValue((BCWS / 10000).ToString("0.####"));
                            //ACWP
                            cell = row.CreateCell(2);
                            cell.CellStyle = cellStyle;
                            cell.SetCellValue((ACWP / 10000).ToString("0.####"));
                            //CV
                            cell = row.CreateCell(3);
                            cell.CellStyle = cellStyle;
                            cell.SetCellValue(CV.ToString("0.####"));
                            //SV
                            cell = row.CreateCell(4);
                            cell.CellStyle = cellStyle;
                            cell.SetCellValue(SV.ToString("0.####"));
                            //CPI
                            cell = row.CreateCell(5);
                            cell.CellStyle = cellStyle;
                            cell.SetCellValue(CPI.ToString("0.####"));
                            //SPI
                            cell = row.CreateCell(6);
                            cell.CellStyle = cellStyle;
                            cell.SetCellValue(SPI.ToString("0.####"));
                            rowCount += 2;
                            #endregion
                            #region 三、本月施工进度情况
                            row = sheet.CreateRow(rowCount);
                            cell = row.CreateCell(0);
                            cell.CellStyle = cellStyle1;
                            cell.SetCellValue("三、本月施工进度情况");
                            cell = row.CreateCell(1);
                            cell.CellStyle = cellStyle1;
                            cell.SetCellValue("");
                            cell = row.CreateCell(2);
                            cell.CellStyle = cellStyle1;
                            cell.SetCellValue("");
                            cell = row.CreateCell(3);
                            cell.CellStyle = cellStyle1;
                            cell.SetCellValue("");
                            cell = row.CreateCell(4);
                            cell.CellStyle = cellStyle1;
                            cell.SetCellValue("");
                            cell = row.CreateCell(5);
                            cell.CellStyle = cellStyle1;
                            cell.SetCellValue("");
                            cell = row.CreateCell(6);
                            cell.CellStyle = cellStyle1;
                            cell.SetCellValue("");
                            region = new CellRangeAddress(rowCount, rowCount, 0, 6);
                            sheet.AddMergedRegion(region);
                            rowCount += 1;
                            //赢得值参数(单位:万元)
                            row = sheet.CreateRow(rowCount);
                            cell = row.CreateCell(0);
                            cell.CellStyle = cellStyle;
                            cell.SetCellValue("赢得值参数(单位:万元)");
                            cell = row.CreateCell(1);
                            cell.CellStyle = cellStyle;
                            cell.SetCellValue("");
                            cell = row.CreateCell(2);
                            cell.CellStyle = cellStyle;
                            cell.SetCellValue("");
                            region = new CellRangeAddress(rowCount, rowCount, 0, 2);
                            sheet.AddMergedRegion(region);
                            //赢得值评价指标
                            cell = row.CreateCell(3);
                            cell.CellStyle = cellStyle;
                            cell.SetCellValue("赢得值评价指标");
                            cell = row.CreateCell(4);
                            cell.CellStyle = cellStyle;
                            cell.SetCellValue("");
                            cell = row.CreateCell(5);
                            cell.CellStyle = cellStyle;
                            cell.SetCellValue("");
                            cell = row.CreateCell(6);
                            cell.CellStyle = cellStyle;
                            cell.SetCellValue("");
                            region = new CellRangeAddress(rowCount, rowCount, 3, 6);
                            sheet.AddMergedRegion(region);
                            rowCount += 1;
                            //BCWP
                            row = sheet.CreateRow(rowCount);
                            cell = row.CreateCell(0);
                            cell.CellStyle = cellStyle;
                            cell.SetCellValue("BCWP");
                            //BCWS
                            cell = row.CreateCell(1);
                            cell.CellStyle = cellStyle;
                            cell.SetCellValue("BCWS");
                            //ACWP
                            cell = row.CreateCell(2);
                            cell.CellStyle = cellStyle;
                            cell.SetCellValue("ACWP");
                            //CV
                            cell = row.CreateCell(3);
                            cell.CellStyle = cellStyle;
                            cell.SetCellValue("CV");
                            //SV
                            cell = row.CreateCell(4);
                            cell.CellStyle = cellStyle;
                            cell.SetCellValue("SV");
                            //CPI
                            cell = row.CreateCell(5);
                            cell.CellStyle = cellStyle;
                            cell.SetCellValue("CPI");
                            //SPI
                            cell = row.CreateCell(6);
                            cell.CellStyle = cellStyle;
                            cell.SetCellValue("SPI");
                            //数值
                            //BCWP
                            rowCount += 1;
                            row = sheet.CreateRow(rowCount);
                            cell = row.CreateCell(0);
                            cell.CellStyle = cellStyle;
                            cell.SetCellValue((mBCWP / 10000).ToString("0.####"));
                            //BCWS
                            cell = row.CreateCell(1);
                            cell.CellStyle = cellStyle;
                            cell.SetCellValue((mBCWS / 10000).ToString("0.####"));
                            //ACWP
                            cell = row.CreateCell(2);
                            cell.CellStyle = cellStyle;
                            cell.SetCellValue((mACWP / 10000).ToString("0.####"));
                            //CV
                            cell = row.CreateCell(3);
                            cell.CellStyle = cellStyle;
                            cell.SetCellValue(mCV.ToString("0.####"));
                            //SV
                            cell = row.CreateCell(4);
                            cell.CellStyle = cellStyle;
                            cell.SetCellValue(mSV.ToString("0.####"));
                            //CPI
                            cell = row.CreateCell(5);
                            cell.CellStyle = cellStyle;
                            cell.SetCellValue(mCPI.ToString("0.####"));
                            //SPI
                            cell = row.CreateCell(6);
                            cell.CellStyle = cellStyle;
                            cell.SetCellValue(mSPI.ToString("0.####"));
                            rowCount += 2;
                            #endregion
                            #region 四、专业和分部工程工程施工进度情况
                            row = sheet.CreateRow(rowCount);
                            cell = row.CreateCell(0);
                            cell.CellStyle = cellStyle1;
                            cell.SetCellValue("四、专业和分部工程工程施工进度情况");
                            region = new CellRangeAddress(rowCount, rowCount, 0, 17);
                            sheet.AddMergedRegion(region);
                            rowCount += 1;
                            row = sheet.CreateRow(rowCount);
                            cell = row.CreateCell(0);
                            cell.CellStyle = cellStyle;
                            cell.SetCellValue("序号");
                            // 合并单元格,参数依次为起始行,结束行,起始列,结束列 (索引0开始)
                            sheet.AddMergedRegion(new CellRangeAddress(rowCount, rowCount + 1, 0, 0));
                            cell = row.CreateCell(1);
                            cell.CellStyle = cellStyle;
                            cell.SetCellValue("装置");
                            // 合并单元格,参数依次为起始行,结束行,起始列,结束列 (索引0开始)
                            sheet.AddMergedRegion(new CellRangeAddress(rowCount, rowCount + 1, 1, 1));
                            cell = row.CreateCell(2);
                            cell.CellStyle = cellStyle;
                            cell.SetCellValue("专业");
                            // 合并单元格,参数依次为起始行,结束行,起始列,结束列 (索引0开始)
                            sheet.AddMergedRegion(new CellRangeAddress(rowCount, rowCount + 1, 2, 2));
                            cell = row.CreateCell(3);
                            cell.CellStyle = cellStyle;
                            cell.SetCellValue("分部工程");
                            // 合并单元格,参数依次为起始行,结束行,起始列,结束列 (索引0开始)
                            sheet.AddMergedRegion(new CellRangeAddress(rowCount, rowCount + 1, 3, 3));
                            cell = row.CreateCell(4);
                            cell.CellStyle = cellStyle;
                            cell.SetCellValue("本月赢得值参数(单位:万元)");
                            // 合并单元格,参数依次为起始行,结束行,起始列,结束列 (索引0开始)
                            sheet.AddMergedRegion(new CellRangeAddress(rowCount, rowCount, 4, 6));
                            cell = row.CreateCell(5);
                            cell.CellStyle = cellStyle;
                            cell.SetCellValue("");
                            cell = row.CreateCell(6);
                            cell.CellStyle = cellStyle;
                            cell.SetCellValue("");
                            cell = row.CreateCell(7);
                            cell.CellStyle = cellStyle;
                            cell.SetCellValue("本月赢得值评价指标");
                            // 合并单元格,参数依次为起始行,结束行,起始列,结束列 (索引0开始)
                            sheet.AddMergedRegion(new CellRangeAddress(rowCount, rowCount, 7, 10));
                            cell = row.CreateCell(8);
                            cell.CellStyle = cellStyle;
                            cell.SetCellValue("");
                            cell = row.CreateCell(9);
                            cell.CellStyle = cellStyle;
                            cell.SetCellValue("");
                            cell = row.CreateCell(10);
                            cell.CellStyle = cellStyle;
                            cell.SetCellValue("");
                            cell = row.CreateCell(11);
                            cell.CellStyle = cellStyle;
                            cell.SetCellValue("累计赢得值参数(单位:万元)");
                            // 合并单元格,参数依次为起始行,结束行,起始列,结束列 (索引0开始)
                            sheet.AddMergedRegion(new CellRangeAddress(rowCount, rowCount, 11, 13));
                            cell = row.CreateCell(12);
                            cell.CellStyle = cellStyle;
                            cell.SetCellValue("");
                            cell = row.CreateCell(13);
                            cell.CellStyle = cellStyle;
                            cell.SetCellValue("");
                            cell = row.CreateCell(14);
                            cell.CellStyle = cellStyle;
                            cell.SetCellValue("累计赢得值评价指标");
                            // 合并单元格,参数依次为起始行,结束行,起始列,结束列 (索引0开始)
                            sheet.AddMergedRegion(new CellRangeAddress(rowCount, rowCount, 14, 17));
                            cell = row.CreateCell(15);
                            cell.CellStyle = cellStyle;
                            cell.SetCellValue("");
                            cell = row.CreateCell(16);
                            cell.CellStyle = cellStyle;
                            cell.SetCellValue("");
                            cell = row.CreateCell(17);
                            cell.CellStyle = cellStyle;
                            cell.SetCellValue("");
                            rowCount += 1;
                            row = sheet.CreateRow(rowCount);
                            cell = row.CreateCell(0);
                            cell.CellStyle = cellStyle;
                            cell.SetCellValue("");
                            cell = row.CreateCell(1);
                            cell.CellStyle = cellStyle;
                            cell.SetCellValue("");
                            cell = row.CreateCell(2);
                            cell.CellStyle = cellStyle;
                            cell.SetCellValue("");
                            cell = row.CreateCell(3);
                            cell.CellStyle = cellStyle;
                            cell.SetCellValue("");
                            cell = row.CreateCell(4);
                            cell.CellStyle = cellStyle;
                            cell.SetCellValue("BCWP");
                            cell = row.CreateCell(5);
                            cell.CellStyle = cellStyle;
                            cell.SetCellValue("BCWS");
                            cell = row.CreateCell(6);
                            cell.CellStyle = cellStyle;
                            cell.SetCellValue("ACWP");
                            cell = row.CreateCell(7);
                            cell.CellStyle = cellStyle;
                            cell.SetCellValue("CV");
                            cell = row.CreateCell(8);
                            cell.CellStyle = cellStyle;
                            cell.SetCellValue("SV");
                            cell = row.CreateCell(9);
                            cell.CellStyle = cellStyle;
                            cell.SetCellValue("CPI");
                            cell = row.CreateCell(10);
                            cell.CellStyle = cellStyle;
                            cell.SetCellValue("SPI");
                            cell = row.CreateCell(11);
                            cell.CellStyle = cellStyle;
                            cell.SetCellValue("BCWP");
                            cell = row.CreateCell(12);
                            cell.CellStyle = cellStyle;
                            cell.SetCellValue("BCWS");
                            cell = row.CreateCell(13);
                            cell.CellStyle = cellStyle;
                            cell.SetCellValue("ACWP");
                            cell = row.CreateCell(14);
                            cell.CellStyle = cellStyle;
                            cell.SetCellValue("CV");
                            cell = row.CreateCell(15);
                            cell.CellStyle = cellStyle;
                            cell.SetCellValue("SV");
                            cell = row.CreateCell(16);
                            cell.CellStyle = cellStyle;
                            cell.SetCellValue("CPI");
                            cell = row.CreateCell(17);
                            cell.CellStyle = cellStyle;
                            cell.SetCellValue("SPI");
                            //导出数据
                            Model.SGGLDB db = Funs.DB;
                            var cnProfessions = from x in db.WBS_CnProfession where x.ProjectId == this.CurrUser.LoginProjectId && x.IsApprove == true select x;
                            var installationIds = cnProfessions.Select(x => x.InstallationId).Distinct().ToList();
                            var installations = from x in db.Project_Installation where x.ProjectId == this.CurrUser.LoginProjectId && installationIds.Contains(x.InstallationId) select x;
                            var unitProjects = from x in db.Wbs_UnitProject where x.ProjectId == this.CurrUser.LoginProjectId && x.IsApprove == true select x;
                            var details = from x in db.View_WBS_CostControlParentDetail
                                          where x.Months == Funs.GetNewDateTime(date)
                                          select x;
                            decimal cnACWP, cnBCWP, cnBCWS, cnmACWP, cnmBCWP, cnmBCWS, cnCV, cnSV, cnCPI, cnSPI, cnmCV, cnmSV, cnmCPI, cnmSPI,
                                unACWP, unBCWP, unBCWS, unmACWP, unmBCWP, unmBCWS, unCV, unSV, unCPI, unSPI, unmCV, unmSV, unmCPI, unmSPI,
                                inACWP, inBCWP, inBCWS, inmACWP, inmBCWP, inmBCWS, inCV, inSV, inCPI, inSPI, inmCV, inmSV, inmCPI, inmSPI;
                            int a = 1, b = 1, c = 1;
                            foreach (var item in installations)
                            {
                                rowCount += 1;
                                inACWP = 0;
                                inBCWP = 0;
                                inBCWS = 0;
                                inmACWP = 0;
                                inmBCWP = 0;
                                inmBCWS = 0;
                                inCV = 0;
                                inSV = 0;
                                inCPI = 0;
                                inSPI = 0;
                                inmCV = 0;
                                inmSV = 0;
                                inmCPI = 0;
                                inmSPI = 0;
                                //序号
                                row = sheet.CreateRow(rowCount);
                                cell = row.CreateCell(0);
                                cell.CellStyle = cellStyle;
                                cell.SetCellValue(c.ToString());
                                //装置
                                cell = row.CreateCell(1);
                                cell.CellStyle = cellStyle;
                                cell.SetCellValue(item.InstallationName);
                                //专业
                                cell = row.CreateCell(2);
                                cell.CellStyle = cellStyle;
                                cell.SetCellValue(string.Empty);
                                //分部工程
                                cell = row.CreateCell(3);
                                cell.CellStyle = cellStyle;
                                cell.SetCellValue(string.Empty);
                                var inDetails = (from x in details
                                                 where x.ParentId == item.InstallationId
                                                 select x).ToList();
                                inmACWP = Funs.GetNewDecimalOrZero(inDetails.Select(x => x.ThisRealCost).Sum().ToString()) / 10000;
                                inmBCWP = Funs.GetNewDecimalOrZero(inDetails.Select(x => x.ThisPlanCost).Sum().ToString()) / 10000;
                                inmBCWS = Funs.GetNewDecimalOrZero(inDetails.Select(x => x.ThisPlanValue).Sum().ToString()) / 10000;
                                inmCV = inmBCWP - inmACWP;
                                inmSV = inmBCWP - inmBCWS;
                                if (inmACWP > 0)
                                {
                                    inmCPI = inmBCWP / inmACWP;
                                }
                                if (inmBCWS > 0)
                                {
                                    inmSPI = inmBCWP / inmBCWS;
                                }
                                //BCWP
                                cell = row.CreateCell(4);
                                cell.CellStyle = cellStyle;
                                cell.SetCellValue(inmBCWP.ToString("0.####"));
                                //BCWS
                                cell = row.CreateCell(5);
                                cell.CellStyle = cellStyle;
                                cell.SetCellValue(inmBCWS.ToString("0.####"));
                                //ACWP
                                cell = row.CreateCell(6);
                                cell.CellStyle = cellStyle;
                                cell.SetCellValue(inmACWP.ToString("0.####"));
                                //CV
                                cell = row.CreateCell(7);
                                cell.CellStyle = cellStyle;
                                cell.SetCellValue(inmCV.ToString("0.####"));
                                //SV
                                cell = row.CreateCell(8);
                                cell.CellStyle = cellStyle;
                                cell.SetCellValue(inmSV.ToString("0.####"));
                                //CPI
                                cell = row.CreateCell(9);
                                cell.CellStyle = cellStyle;
                                cell.SetCellValue(inmCPI.ToString("0.####"));
                                //SPI
                                cell = row.CreateCell(10);
                                cell.CellStyle = cellStyle;
                                cell.SetCellValue(inmSPI.ToString("0.####"));
                                inACWP = Funs.GetNewDecimalOrZero(inDetails.Select(x => x.TotalRealCost).Sum().ToString()) / 10000;
                                inBCWP = Funs.GetNewDecimalOrZero(inDetails.Select(x => x.TotalPlanCost).Sum().ToString()) / 10000;
                                inBCWS = Funs.GetNewDecimalOrZero(inDetails.Select(x => x.TotalPlanValue).Sum().ToString()) / 10000;
                                inCV = inBCWP - inACWP;
                                inSV = inBCWP - inBCWS;
                                if (inACWP > 0)
                                {
                                    inCPI = inBCWP / inACWP;
                                }
                                if (inBCWS > 0)
                                {
                                    inSPI = inBCWP / inBCWS;
                                }
                                //BCWP
                                cell = row.CreateCell(11);
                                cell.CellStyle = cellStyle;
                                cell.SetCellValue(inBCWP.ToString("0.####"));
                                //BCWS
                                cell = row.CreateCell(12);
                                cell.CellStyle = cellStyle;
                                cell.SetCellValue(inBCWS.ToString("0.####"));
                                //ACWP
                                cell = row.CreateCell(13);
                                cell.CellStyle = cellStyle;
                                cell.SetCellValue(inACWP.ToString("0.####"));
                                //CV
                                cell = row.CreateCell(14);
                                cell.CellStyle = cellStyle;
                                cell.SetCellValue(inCV.ToString("0.####"));
                                //SV
                                cell = row.CreateCell(15);
                                cell.CellStyle = cellStyle;
                                cell.SetCellValue(inSV.ToString("0.####"));
                                //CPI
                                cell = row.CreateCell(16);
                                cell.CellStyle = cellStyle;
                                cell.SetCellValue(inCPI.ToString("0.####"));
                                //SPI
                                cell = row.CreateCell(17);
                                cell.CellStyle = cellStyle;
                                cell.SetCellValue(inSPI.ToString("0.####"));
                                a = 1;
                                var icnProfessions = cnProfessions.Where(x => x.InstallationId == item.InstallationId);
                                foreach (var cn in icnProfessions)
                                {
                                    rowCount += 1;
                                    cnACWP = 0;
                                    cnBCWP = 0;
                                    cnBCWS = 0;
                                    cnmACWP = 0;
                                    cnmBCWP = 0;
                                    cnmBCWS = 0;
                                    cnCV = 0;
                                    cnSV = 0;
                                    cnCPI = 0;
                                    cnSPI = 0;
                                    cnmCV = 0;
                                    cnmSV = 0;
                                    cnmCPI = 0;
                                    cnmSPI = 0;
                                    //序号
                                    row = sheet.CreateRow(rowCount);
                                    cell = row.CreateCell(0);
                                    cell.CellStyle = cellStyle;
                                    cell.SetCellValue(c.ToString() + "." + a.ToString());
                                    //装置
                                    cell = row.CreateCell(1);
                                    cell.CellStyle = cellStyle;
                                    cell.SetCellValue(string.Empty);
                                    //专业
                                    cell = row.CreateCell(2);
                                    cell.CellStyle = cellStyle;
                                    cell.SetCellValue(cn.CnProfessionName);
                                    //分部工程
                                    cell = row.CreateCell(3);
                                    cell.CellStyle = cellStyle;
                                    cell.SetCellValue(string.Empty);
                                    var cnDetails = (from x in details
                                                     where x.ParentId == cn.CnProfessionId
                                                     select x).ToList();
                                    cnmACWP = Funs.GetNewDecimalOrZero(cnDetails.Select(x => x.ThisRealCost).Sum().ToString()) / 10000;
                                    cnmBCWP = Funs.GetNewDecimalOrZero(cnDetails.Select(x => x.ThisPlanCost).Sum().ToString()) / 10000;
                                    cnmBCWS = Funs.GetNewDecimalOrZero(cnDetails.Select(x => x.ThisPlanValue).Sum().ToString()) / 10000;
                                    cnmCV = cnmBCWP - cnmACWP;
                                    cnmSV = cnmBCWP - cnmBCWS;
                                    if (cnmACWP > 0)
                                    {
                                        cnmCPI = cnmBCWP / cnmACWP;
                                    }
                                    if (cnmBCWS > 0)
                                    {
                                        cnmSPI = cnmBCWP / cnmBCWS;
                                    }
                                    //BCWP
                                    cell = row.CreateCell(4);
                                    cell.CellStyle = cellStyle;
                                    cell.SetCellValue(cnmBCWP.ToString("0.####"));
                                    //BCWS
                                    cell = row.CreateCell(5);
                                    cell.CellStyle = cellStyle;
                                    cell.SetCellValue(cnmBCWS.ToString("0.####"));
                                    //ACWP
                                    cell = row.CreateCell(6);
                                    cell.CellStyle = cellStyle;
                                    cell.SetCellValue(cnmACWP.ToString("0.####"));
                                    //CV
                                    cell = row.CreateCell(7);
                                    cell.CellStyle = cellStyle;
                                    cell.SetCellValue(cnmCV.ToString("0.####"));
                                    //SV
                                    cell = row.CreateCell(8);
                                    cell.CellStyle = cellStyle;
                                    cell.SetCellValue(cnmSV.ToString("0.####"));
                                    //CPI
                                    cell = row.CreateCell(9);
                                    cell.CellStyle = cellStyle;
                                    cell.SetCellValue(cnmCPI.ToString("0.####"));
                                    //SPI
                                    cell = row.CreateCell(10);
                                    cell.CellStyle = cellStyle;
                                    cell.SetCellValue(cnmSPI.ToString("0.####"));
                                    cnACWP = Funs.GetNewDecimalOrZero(cnDetails.Select(x => x.TotalRealCost).Sum().ToString()) / 10000;
                                    cnBCWP = Funs.GetNewDecimalOrZero(cnDetails.Select(x => x.TotalPlanCost).Sum().ToString()) / 10000;
                                    cnBCWS = Funs.GetNewDecimalOrZero(cnDetails.Select(x => x.TotalPlanValue).Sum().ToString()) / 10000;
                                    cnCV = cnBCWP - cnACWP;
                                    cnSV = cnBCWP - cnBCWS;
                                    if (cnACWP > 0)
                                    {
                                        cnCPI = cnBCWP / cnACWP;
                                    }
                                    if (cnBCWS > 0)
                                    {
                                        cnSPI = cnBCWP / cnBCWS;
                                    }
                                    //BCWP
                                    cell = row.CreateCell(11);
                                    cell.CellStyle = cellStyle;
                                    cell.SetCellValue(cnBCWP.ToString("0.####"));
                                    //BCWS
                                    cell = row.CreateCell(12);
                                    cell.CellStyle = cellStyle;
                                    cell.SetCellValue(cnBCWS.ToString("0.####"));
                                    //ACWP
                                    cell = row.CreateCell(13);
                                    cell.CellStyle = cellStyle;
                                    cell.SetCellValue(cnACWP.ToString("0.####"));
                                    //CV
                                    cell = row.CreateCell(14);
                                    cell.CellStyle = cellStyle;
                                    cell.SetCellValue(cnCV.ToString("0.####"));
                                    //SV
                                    cell = row.CreateCell(15);
                                    cell.CellStyle = cellStyle;
                                    cell.SetCellValue(cnSV.ToString("0.####"));
                                    //CPI
                                    cell = row.CreateCell(16);
                                    cell.CellStyle = cellStyle;
                                    cell.SetCellValue(cnCPI.ToString("0.####"));
                                    //SPI
                                    cell = row.CreateCell(17);
                                    cell.CellStyle = cellStyle;
                                    cell.SetCellValue(cnSPI.ToString("0.####"));
                                    b = 1;
                                    var unLists = from x in unitProjects where x.CnProfessionId == cn.CnProfessionId orderby x.SortIndex select x;
                                    foreach (var un in unLists)
                                    {
                                        rowCount += 1;
                                        unACWP = 0;
                                        unBCWP = 0;
                                        unBCWS = 0;
                                        unmACWP = 0;
                                        unmBCWP = 0;
                                        unmBCWS = 0;
                                        unCV = 0;
                                        unSV = 0;
                                        unCPI = 0;
                                        unSPI = 0;
                                        unmCV = 0;
                                        unmSV = 0;
                                        unmCPI = 0;
                                        unmSPI = 0;
                                        //序号
                                        row = sheet.CreateRow(rowCount);
                                        cell = row.CreateCell(0);
                                        cell.CellStyle = cellStyle;
                                        cell.SetCellValue(c.ToString() + "." + a.ToString() + "." + b.ToString());
                                        //装置
                                        cell = row.CreateCell(1);
                                        cell.CellStyle = cellStyle;
                                        cell.SetCellValue(string.Empty);
                                        //专业
                                        cell = row.CreateCell(2);
                                        cell.CellStyle = cellStyle;
                                        cell.SetCellValue(string.Empty);
                                        //分部工程
                                        cell = row.CreateCell(3);
                                        cell.CellStyle = cellStyle;
                                        cell.SetCellValue(un.UnitProjectName);
                                        var unDetails = from x in details
                                                        where x.ParentId == un.UnitProjectId
                                                        select x;
                                        unmACWP = Funs.GetNewDecimalOrZero(unDetails.Select(x => x.ThisRealCost).Sum().ToString()) / 10000;
                                        unmBCWP = Funs.GetNewDecimalOrZero(unDetails.Select(x => x.ThisPlanCost).Sum().ToString()) / 10000;
                                        unmBCWS = Funs.GetNewDecimalOrZero(unDetails.Select(x => x.ThisPlanValue).Sum().ToString()) / 10000;
                                        unmCV = unmBCWP - unmACWP;
                                        unmSV = unmBCWP - unmBCWS;
                                        if (unmACWP > 0)
                                        {
                                            unmCPI = unmBCWP / unmACWP;
                                        }
                                        if (unmBCWS > 0)
                                        {
                                            unmSPI = unmBCWP / unmBCWS;
                                        }
                                        //BCWP
                                        cell = row.CreateCell(4);
                                        cell.CellStyle = cellStyle;
                                        cell.SetCellValue(unmBCWP.ToString("0.####"));
                                        //BCWS
                                        cell = row.CreateCell(5);
                                        cell.CellStyle = cellStyle;
                                        cell.SetCellValue(unmBCWS.ToString("0.####"));
                                        //ACWP
                                        cell = row.CreateCell(6);
                                        cell.CellStyle = cellStyle;
                                        cell.SetCellValue(unmACWP.ToString("0.####"));
                                        //CV
                                        cell = row.CreateCell(7);
                                        cell.CellStyle = cellStyle;
                                        cell.SetCellValue(unmCV.ToString("0.####"));
                                        //SV
                                        cell = row.CreateCell(8);
                                        cell.CellStyle = cellStyle;
                                        cell.SetCellValue(unmSV.ToString("0.####"));
                                        //CPI
                                        cell = row.CreateCell(9);
                                        cell.CellStyle = cellStyle;
                                        cell.SetCellValue(unmCPI.ToString("0.####"));
                                        //SPI
                                        cell = row.CreateCell(10);
                                        cell.CellStyle = cellStyle;
                                        cell.SetCellValue(unmSPI.ToString("0.####"));
                                        unACWP = Funs.GetNewDecimalOrZero(unDetails.Select(x => x.TotalRealCost).Sum().ToString()) / 10000;
                                        unBCWP = Funs.GetNewDecimalOrZero(unDetails.Select(x => x.TotalPlanCost).Sum().ToString()) / 10000;
                                        unBCWS = Funs.GetNewDecimalOrZero(unDetails.Select(x => x.TotalPlanValue).Sum().ToString()) / 10000;
                                        unCV = unBCWP - unACWP;
                                        unSV = unBCWP - unBCWS;
                                        if (unACWP > 0)
                                        {
                                            unCPI = unBCWP / unACWP;
                                        }
                                        if (unBCWS > 0)
                                        {
                                            unSPI = unBCWP / unBCWS;
                                        }
                                        //BCWP
                                        cell = row.CreateCell(11);
                                        cell.CellStyle = cellStyle;
                                        cell.SetCellValue(cnBCWP.ToString("0.####"));
                                        //BCWS
                                        cell = row.CreateCell(12);
                                        cell.CellStyle = cellStyle;
                                        cell.SetCellValue(unBCWP.ToString("0.####"));
                                        //ACWP
                                        cell = row.CreateCell(13);
                                        cell.CellStyle = cellStyle;
                                        cell.SetCellValue(unACWP.ToString("0.####"));
                                        //CV
                                        cell = row.CreateCell(14);
                                        cell.CellStyle = cellStyle;
                                        cell.SetCellValue(unCV.ToString("0.####"));
                                        //SV
                                        cell = row.CreateCell(15);
                                        cell.CellStyle = cellStyle;
                                        cell.SetCellValue(unSV.ToString("0.####"));
                                        //CPI
                                        cell = row.CreateCell(16);
                                        cell.CellStyle = cellStyle;
                                        cell.SetCellValue(unCPI.ToString("0.####"));
                                        //SPI
                                        cell = row.CreateCell(17);
                                        cell.CellStyle = cellStyle;
                                        cell.SetCellValue(unSPI.ToString("0.####"));
                                        b++;
                                    }
                                    a++;
                                }
                                c++;
                            }
                            #endregion
                            rowCount += 2;
                            #region 五、设备/材料施工进度情况
                            row = sheet.CreateRow(rowCount);
                            cell = row.CreateCell(0);
                            cell.CellStyle = cellStyle1;
                            cell.SetCellValue("五、设备/材料施工进度情况");
                            region = new CellRangeAddress(rowCount, rowCount, 0, 10);
                            sheet.AddMergedRegion(region);
                            rowCount += 1;
                            //表头
                            row = sheet.CreateRow(rowCount);
                            cell = row.CreateCell(0);
                            cell.CellStyle = cellStyle;
                            cell.SetCellValue("序号");
                            cell = row.CreateCell(1);
                            cell.CellStyle = cellStyle;
                            cell.SetCellValue("专业");
                            cell = row.CreateCell(2);
                            cell.CellStyle = cellStyle;
                            cell.SetCellValue("");
                            cell = row.CreateCell(3);
                            cell.CellStyle = cellStyle;
                            cell.SetCellValue("设备材料大类");
                            cell = row.CreateCell(4);
                            cell.CellStyle = cellStyle;
                            cell.SetCellValue("设备材料分类");
                            cell = row.CreateCell(5);
                            cell.CellStyle = cellStyle;
                            cell.SetCellValue("单位");
                            cell = row.CreateCell(6);
                            cell.CellStyle = cellStyle;
                            cell.SetCellValue("合同工作量");
                            cell = row.CreateCell(7);
                            cell.CellStyle = cellStyle;
                            cell.SetCellValue("本月完成量");
                            cell = row.CreateCell(8);
                            cell.CellStyle = cellStyle;
                            cell.SetCellValue("累计完成量");
                            cell = row.CreateCell(9);
                            cell.CellStyle = cellStyle;
                            cell.SetCellValue("本月完成率");
                            cell = row.CreateCell(10);
                            cell.CellStyle = cellStyle;
                            cell.SetCellValue("累计完成率");
                            //数据
                            #region 加载数据
                            var cnProfessionInits = from x in db.WBS_CnProfessionInit orderby x.SortIndex select x;
                            var costControls = from x in db.WBS_CostControl
                                               join z in db.WBS_EquipmentMaterialType on x.EquipmentMaterialTypeId equals z.EquipmentMaterialTypeId
                                               join t in db.Wbs_WbsSet on x.WbsSetId equals t.WbsSetId
                                               where x.ProjectId == this.CurrUser.LoginProjectId
                                               select new
                                               {
                                                   x.Unit,
                                                   x.TotalNum,
                                                   z.EquipmentMaterialBigTypeId,
                                                   z.EquipmentMaterialTypeId,
                                                   t.InstallationId,
                                               };
                            var costControlDetails = from x in db.WBS_CostControlDetail
                                                     join y in db.WBS_CostControl on x.CostControlId equals y.CostControlId
                                                     join z in db.WBS_EquipmentMaterialType on y.EquipmentMaterialTypeId equals z.EquipmentMaterialTypeId
                                                     join t in db.Wbs_WbsSet on y.WbsSetId equals t.WbsSetId
                                                     where x.Months <= Funs.GetNewDateTime(date) && y.ProjectId == this.CurrUser.LoginProjectId
                                                     orderby x.Months descending
                                                     select new
                                                     {
                                                         x.CostControlDetailId,
                                                         t.InstallationId,
                                                         y.EquipmentMaterialTypeId,
                                                         z.EquipmentMaterialBigTypeId,
                                                         z.EquipmentMaterialTypeName,
                                                         x.Months,
                                                         x.ThisNum,
                                                     };
                            var equipmentMaterialBigTypes = from x in db.WBS_EquipmentMaterialBigType orderby x.EquipmentMaterialBigTypeCode select x;
                            var equipmentMaterialTypes = from x in db.WBS_EquipmentMaterialType orderby x.EquipmentMaterialTypeCode select x;
                            int v = 1, w = 2, d = 1, f = 1;
                            foreach (var cn in cnProfessionInits)
                            {
                                rowCount += 1;
                                row = sheet.CreateRow(rowCount);
                                #region 加载数据
                                //序号
                                cell = row.CreateCell(0);
                                cell.CellStyle = cellStyle;
                                cell.SetCellValue(v.ToString());
                                //专业
                                cell = row.CreateCell(1);
                                cell.CellStyle = cellStyle;
                                cell.SetCellValue(cn.CnProfessionName);
                                cell = row.CreateCell(2);
                                cell.CellStyle = cellStyle;
                                cell.SetCellValue("");
                                cell = row.CreateCell(3);
                                cell.CellStyle = cellStyle;
                                cell.SetCellValue("");
                                cell = row.CreateCell(4);
                                cell.CellStyle = cellStyle;
                                cell.SetCellValue("");
                                cell = row.CreateCell(5);
                                cell.CellStyle = cellStyle;
                                cell.SetCellValue("");
                                cell = row.CreateCell(6);
                                cell.CellStyle = cellStyle;
                                cell.SetCellValue("");
                                cell = row.CreateCell(7);
                                cell.CellStyle = cellStyle;
                                cell.SetCellValue("");
                                cell = row.CreateCell(8);
                                cell.CellStyle = cellStyle;
                                cell.SetCellValue("");
                                cell = row.CreateCell(9);
                                cell.CellStyle = cellStyle;
                                cell.SetCellValue("");
                                cell = row.CreateCell(10);
                                cell.CellStyle = cellStyle;
                                cell.SetCellValue("");
                                #endregion
                                rowCount += 1;
                                row = sheet.CreateRow(rowCount);
                                #region 加载数据
                                //序号
                                cell = row.CreateCell(0);
                                cell.CellStyle = cellStyle;
                                cell.SetCellValue(v.ToString() + ".1");
                                //专业
                                cell = row.CreateCell(1);
                                cell.CellStyle = cellStyle;
                                cell.SetCellValue("");
                                cell = row.CreateCell(2);
                                cell.CellStyle = cellStyle;
                                cell.SetCellValue("本专业汇总统计");
                                cell = row.CreateCell(3);
                                cell.CellStyle = cellStyle;
                                cell.SetCellValue("");
                                cell = row.CreateCell(4);
                                cell.CellStyle = cellStyle;
                                cell.SetCellValue("");
                                cell = row.CreateCell(5);
                                cell.CellStyle = cellStyle;
                                cell.SetCellValue("");
                                cell = row.CreateCell(6);
                                cell.CellStyle = cellStyle;
                                cell.SetCellValue("");
                                cell = row.CreateCell(7);
                                cell.CellStyle = cellStyle;
                                cell.SetCellValue("");
                                cell = row.CreateCell(8);
                                cell.CellStyle = cellStyle;
                                cell.SetCellValue("");
                                cell = row.CreateCell(9);
                                cell.CellStyle = cellStyle;
                                cell.SetCellValue("");
                                cell = row.CreateCell(10);
                                cell.CellStyle = cellStyle;
                                cell.SetCellValue("");
                                #endregion
                                d = 1;
                                var bigTypes = equipmentMaterialBigTypes.Where(x => x.CnProfessionId == cn.CnProfessionId).OrderBy(x => x.EquipmentMaterialBigTypeCode);
                                foreach (var bigType in bigTypes)
                                {
                                    rowCount += 1;
                                    row = sheet.CreateRow(rowCount);
                                    #region 加载数据
                                    //序号
                                    cell = row.CreateCell(0);
                                    cell.CellStyle = cellStyle;
                                    cell.SetCellValue(v.ToString() + ".1." + d.ToString());
                                    cell = row.CreateCell(1);
                                    cell.CellStyle = cellStyle;
                                    cell.SetCellValue("");
                                    cell = row.CreateCell(2);
                                    cell.CellStyle = cellStyle;
                                    cell.SetCellValue("");
                                    //设备材料大类
                                    cell = row.CreateCell(3);
                                    cell.CellStyle = cellStyle;
                                    cell.SetCellValue(bigType.EquipmentMaterialBigTypeName);
                                    //设备材料分类
                                    cell = row.CreateCell(4);
                                    cell.CellStyle = cellStyle;
                                    cell.SetCellValue("");
                                    var list = costControls.Where(x => x.EquipmentMaterialBigTypeId == bigType.EquipmentMaterialBigTypeId);
                                    if (list.Count() > 0)
                                    {
                                        //单位
                                        cell = row.CreateCell(5);
                                        cell.CellStyle = cellStyle;
                                        cell.SetCellValue(list.First().Unit);
                                        //合同工作量row5[4]
                                        var cellValue1 = list.ToList().Sum(x => x.TotalNum ?? 0).ToString();
                                        cell = row.CreateCell(6);
                                        cell.CellStyle = cellStyle;
                                        cell.SetCellValue(cellValue1);
                                        //本月完成量row5[5] 
                                        var list2 = costControlDetails.Where(x => x.EquipmentMaterialBigTypeId == bigType.EquipmentMaterialBigTypeId && x.Months == Funs.GetNewDateTime(date));
                                        var cellValue2 = list2.ToList().Sum(x => x.ThisNum ?? 0).ToString();
                                        cell = row.CreateCell(7);
                                        cell.CellStyle = cellStyle;
                                        cell.SetCellValue(cellValue2);
                                        //累计完成量row5[6]
                                        var list3 = costControlDetails.Where(x => x.EquipmentMaterialBigTypeId == bigType.EquipmentMaterialBigTypeId);
                                        var cellValue3 = list3.ToList().Sum(x => x.ThisNum ?? 0).ToString();
                                        cell = row.CreateCell(8);
                                        cell.CellStyle = cellStyle;
                                        cell.SetCellValue(cellValue3);
                                        //本月完成率
                                        var cellValue4 = "";
                                        cell = row.CreateCell(9);
                                        cell.CellStyle = cellStyle;
                                        if (cellValue1 != "0" && cellValue2 != "0")
                                        {
                                            cellValue4 = (Funs.GetNewDecimalOrZero(cellValue2) / Funs.GetNewDecimalOrZero(cellValue1) * 100).ToString("0.##") + "%";
                                        }
                                        else
                                        {
                                            cellValue4 = "/";
                                        }
                                        cell.SetCellValue(cellValue4);
                                        //累计完成率
                                        var cellValue5 = "";
                                        if (cellValue1 != "0" && cellValue3 != "0")
                                        {
                                            cellValue5 = (Funs.GetNewDecimalOrZero(cellValue3) / Funs.GetNewDecimalOrZero(cellValue1) * 100).ToString("0.##") + "%";
                                        }
                                        else
                                        {
                                            cellValue5 = "/";
                                        }
                                        cell = row.CreateCell(10);
                                        cell.CellStyle = cellStyle;
                                        cell.SetCellValue(cellValue5);
                                    }
                                    else
                                    {
                                        //单位
                                        cell = row.CreateCell(5);
                                        cell.CellStyle = cellStyle;
                                        cell.SetCellValue("");
                                        //合同工作量row5[4]
                                        cell = row.CreateCell(6);
                                        cell.CellStyle = cellStyle;
                                        cell.SetCellValue("");
                                        //本月完成量row5[5] 
                                        cell = row.CreateCell(7);
                                        cell.CellStyle = cellStyle;
                                        cell.SetCellValue("");
                                        //累计完成量row5[6]
                                        cell = row.CreateCell(8);
                                        cell.CellStyle = cellStyle;
                                        cell.SetCellValue("");
                                        //本月完成率
                                        cell = row.CreateCell(9);
                                        cell.CellStyle = cellStyle;
                                        cell.SetCellValue("");
                                        //累计完成率
                                        cell = row.CreateCell(10);
                                        cell.CellStyle = cellStyle;
                                        cell.SetCellValue("");
                                    }
                                    f = 1;
                                    var types = equipmentMaterialTypes.Where(x => x.EquipmentMaterialBigTypeId == bigType.EquipmentMaterialBigTypeId).OrderBy(x => x.EquipmentMaterialTypeCode);
                                    foreach (var equipmentMaterialType in types)
                                    {
                                        rowCount += 1;
                                        row = sheet.CreateRow(rowCount);
                                        //序号
                                        cell = row.CreateCell(0);
                                        cell.CellStyle = cellStyle;
                                        cell.SetCellValue(v.ToString() + ".1." + d.ToString() + "." + f.ToString());
                                        cell = row.CreateCell(1);
                                        cell.CellStyle = cellStyle;
                                        cell.SetCellValue("");
                                        cell = row.CreateCell(2);
                                        cell.CellStyle = cellStyle;
                                        cell.SetCellValue("");
                                        //设备材料大类
                                        cell = row.CreateCell(3);
                                        cell.CellStyle = cellStyle;
                                        cell.SetCellValue("");
                                        //设备材料分类
                                        cell = row.CreateCell(4);
                                        cell.CellStyle = cellStyle;
                                        cell.SetCellValue(equipmentMaterialType.EquipmentMaterialTypeName);
                                        var lists = costControls.Where(x => x.EquipmentMaterialTypeId == equipmentMaterialType.EquipmentMaterialTypeId);
                                        if (lists.Count() > 0)
                                        {
                                            var cellValue1 = "";
                                            //单位
                                            cell = row.CreateCell(5);
                                            cell.CellStyle = cellStyle;
                                            cell.SetCellValue(lists.First().Unit);
                                            //合同工作量row5[4]
                                            cellValue1 = lists.ToList().Sum(x => x.TotalNum ?? 0).ToString();
                                            cell = row.CreateCell(6);
                                            cell.CellStyle = cellStyle;
                                            cell.SetCellValue(cellValue1);
                                            //本月完成量row5[5] 
                                            var list2s = costControlDetails.Where(x => x.EquipmentMaterialTypeId == equipmentMaterialType.EquipmentMaterialTypeId && x.Months == Funs.GetNewDateTime(date));
                                            var cellValue2 = list2s.ToList().Sum(x => x.ThisNum ?? 0).ToString();
                                            cell = row.CreateCell(7);
                                            cell.CellStyle = cellStyle;
                                            cell.SetCellValue(cellValue2);
                                            //累计完成量row5[6]
                                            var list3s = costControlDetails.Where(x => x.EquipmentMaterialTypeId == equipmentMaterialType.EquipmentMaterialTypeId);
                                            var cellValue3 = list3s.ToList().Sum(x => x.ThisNum ?? 0).ToString();
                                            cell = row.CreateCell(8);
                                            cell.CellStyle = cellStyle;
                                            cell.SetCellValue(cellValue3);
                                            //本月完成率
                                            var cellValue4 = "";
                                            cell = row.CreateCell(9);
                                            cell.CellStyle = cellStyle;
                                            if (cellValue1 != "0" && cellValue2 != "0")
                                            {
                                                cellValue4 = (Funs.GetNewDecimalOrZero(cellValue2) / Funs.GetNewDecimalOrZero(cellValue1) * 100).ToString("0.##") + "%";
                                            }
                                            else
                                            {
                                                cellValue4 = "/";
                                            }
                                            cell.SetCellValue(cellValue4);
                                            //累计完成率
                                            var cellValue5 = "";
                                            if (cellValue1 != "0" && cellValue3 != "0")
                                            {
                                                cellValue5 = (Funs.GetNewDecimalOrZero(cellValue3) / Funs.GetNewDecimalOrZero(cellValue1) * 100).ToString("0.##") + "%";
                                            }
                                            else
                                            {
                                                cellValue5 = "/";
                                            }
                                            cell = row.CreateCell(10);
                                            cell.CellStyle = cellStyle;
                                            cell.SetCellValue(cellValue5);
                                        }
                                        else
                                        {
                                            //单位
                                            cell = row.CreateCell(5);
                                            cell.CellStyle = cellStyle;
                                            cell.SetCellValue("");
                                            //合同工作量row5[4]
                                            cell = row.CreateCell(6);
                                            cell.CellStyle = cellStyle;
                                            cell.SetCellValue("");
                                            //本月完成量row5[5] 
                                            cell = row.CreateCell(7);
                                            cell.CellStyle = cellStyle;
                                            cell.SetCellValue("");
                                            //累计完成量row5[6]
                                            cell = row.CreateCell(8);
                                            cell.CellStyle = cellStyle;
                                            cell.SetCellValue("");
                                            //本月完成率
                                            cell = row.CreateCell(9);
                                            cell.CellStyle = cellStyle;
                                            cell.SetCellValue("");
                                            //累计完成率
                                            cell = row.CreateCell(10);
                                            cell.CellStyle = cellStyle;
                                            cell.SetCellValue("");
                                        }
                                        f++;
                                    }
                                    d++;
                                    #endregion
                                }
                                w = 2;
                                foreach (var ins in installations)
                                {
                                    rowCount += 1;
                                    row = sheet.CreateRow(rowCount);
                                    //加载本专业汇总统计以下的
                                    #region 加载数据
                                    //序号
                                    cell = row.CreateCell(0);
                                    cell.CellStyle = cellStyle;
                                    cell.SetCellValue(v.ToString() + "." + w.ToString());
                                    //专业
                                    cell = row.CreateCell(1);
                                    cell.CellStyle = cellStyle;
                                    cell.SetCellValue("");
                                    cell = row.CreateCell(2);
                                    cell.CellStyle = cellStyle;
                                    cell.SetCellValue(ins.InstallationName);
                                    cell = row.CreateCell(3);
                                    cell.CellStyle = cellStyle;
                                    cell.SetCellValue("");
                                    cell = row.CreateCell(4);
                                    cell.CellStyle = cellStyle;
                                    cell.SetCellValue("");
                                    cell = row.CreateCell(5);
                                    cell.CellStyle = cellStyle;
                                    cell.SetCellValue("");
                                    cell = row.CreateCell(6);
                                    cell.CellStyle = cellStyle;
                                    cell.SetCellValue("");
                                    cell = row.CreateCell(7);
                                    cell.CellStyle = cellStyle;
                                    cell.SetCellValue("");
                                    cell = row.CreateCell(8);
                                    cell.CellStyle = cellStyle;
                                    cell.SetCellValue("");
                                    cell = row.CreateCell(9);
                                    cell.CellStyle = cellStyle;
                                    cell.SetCellValue("");
                                    cell = row.CreateCell(10);
                                    cell.CellStyle = cellStyle;
                                    cell.SetCellValue("");
                                    #endregion
                                    d = 1;
                                    var bigTypes2 = equipmentMaterialBigTypes.Where(x => x.CnProfessionId == cn.CnProfessionId).OrderBy(x => x.EquipmentMaterialBigTypeCode);
                                    foreach (var bigType in bigTypes2)
                                    {
                                        rowCount += 1;
                                        row = sheet.CreateRow(rowCount);
                                        //设备材料大类
                                        #region 加载数据
                                        //序号
                                        cell = row.CreateCell(0);
                                        cell.CellStyle = cellStyle;
                                        cell.SetCellValue(v.ToString() + "." + w.ToString() + d.ToString());
                                        cell = row.CreateCell(1);
                                        cell.CellStyle = cellStyle;
                                        cell.SetCellValue("");
                                        cell = row.CreateCell(2);
                                        cell.CellStyle = cellStyle;
                                        cell.SetCellValue("");
                                        //设备材料大类
                                        cell = row.CreateCell(3);
                                        cell.CellStyle = cellStyle;
                                        cell.SetCellValue(bigType.EquipmentMaterialBigTypeName);
                                        //设备材料分类
                                        cell = row.CreateCell(4);
                                        cell.CellStyle = cellStyle;
                                        cell.SetCellValue("");
                                        var list = costControls.Where(x => x.EquipmentMaterialBigTypeId == bigType.EquipmentMaterialBigTypeId && x.InstallationId == ins.InstallationId);
                                        if (list.Count() > 0)
                                        {
                                            //单位
                                            cell = row.CreateCell(5);
                                            cell.CellStyle = cellStyle;
                                            cell.SetCellValue(list.First().Unit);
                                            //合同工作量row5[4]
                                            var cellValue1 = list.ToList().Sum(x => x.TotalNum ?? 0).ToString();
                                            cell = row.CreateCell(6);
                                            cell.CellStyle = cellStyle;
                                            cell.SetCellValue(cellValue1);
                                            //本月完成量row5[5] 
                                            var list2 = costControlDetails.Where(x => x.EquipmentMaterialBigTypeId == bigType.EquipmentMaterialBigTypeId && x.InstallationId == ins.InstallationId && x.Months == Funs.GetNewDateTime(date));
                                            var cellValue2 = list2.ToList().Sum(x => x.ThisNum ?? 0).ToString();
                                            cell = row.CreateCell(7);
                                            cell.CellStyle = cellStyle;
                                            cell.SetCellValue(cellValue2);
                                            //累计完成量row5[6]
                                            var list3 = costControlDetails.Where(x => x.EquipmentMaterialBigTypeId == bigType.EquipmentMaterialBigTypeId && x.InstallationId == ins.InstallationId);
                                            var cellValue3 = list3.ToList().Sum(x => x.ThisNum ?? 0).ToString();
                                            cell = row.CreateCell(8);
                                            cell.CellStyle = cellStyle;
                                            cell.SetCellValue(cellValue3);
                                            //本月完成率
                                            var cellValue4 = "";
                                            cell = row.CreateCell(9);
                                            cell.CellStyle = cellStyle;
                                            if (cellValue1 != "0" && cellValue2 != "0")
                                            {
                                                cellValue4 = (Funs.GetNewDecimalOrZero(cellValue2) / Funs.GetNewDecimalOrZero(cellValue1) * 100).ToString("0.##") + "%";
                                            }
                                            else
                                            {
                                                cellValue4 = "/";
                                            }
                                            cell.SetCellValue(cellValue4);
                                            //累计完成率
                                            var cellValue5 = "";
                                            if (cellValue1 != "0" && cellValue3 != "0")
                                            {
                                                cellValue5 = (Funs.GetNewDecimalOrZero(cellValue3) / Funs.GetNewDecimalOrZero(cellValue1) * 100).ToString("0.##") + "%";
                                            }
                                            else
                                            {
                                                cellValue5 = "/";
                                            }
                                            cell = row.CreateCell(10);
                                            cell.CellStyle = cellStyle;
                                            cell.SetCellValue(cellValue5);
                                        }
                                        else
                                        {
                                            //单位
                                            cell = row.CreateCell(5);
                                            cell.CellStyle = cellStyle;
                                            cell.SetCellValue("");
                                            //合同工作量row5[4]
                                            cell = row.CreateCell(6);
                                            cell.CellStyle = cellStyle;
                                            cell.SetCellValue("");
                                            //本月完成量row5[5] 
                                            cell = row.CreateCell(7);
                                            cell.CellStyle = cellStyle;
                                            cell.SetCellValue("");
                                            //累计完成量row5[6]
                                            cell = row.CreateCell(8);
                                            cell.CellStyle = cellStyle;
                                            cell.SetCellValue("");
                                            //本月完成率
                                            cell = row.CreateCell(9);
                                            cell.CellStyle = cellStyle;
                                            cell.SetCellValue("");
                                            //累计完成率
                                            cell = row.CreateCell(10);
                                            cell.CellStyle = cellStyle;
                                            cell.SetCellValue("");
                                        }
                                        f = 1;
                                        var types = equipmentMaterialTypes.Where(x => x.EquipmentMaterialBigTypeId == bigType.EquipmentMaterialBigTypeId).OrderBy(x => x.EquipmentMaterialTypeCode);
                                        foreach (var equipmentMaterialType in types)
                                        {
                                            rowCount += 1;
                                            row = sheet.CreateRow(rowCount);
                                            //序号
                                            cell = row.CreateCell(0);
                                            cell.CellStyle = cellStyle;
                                            cell.SetCellValue(v.ToString() + "." + w.ToString() + d.ToString() + "." + f.ToString());
                                            cell = row.CreateCell(1);
                                            cell.CellStyle = cellStyle;
                                            cell.SetCellValue("");
                                            cell = row.CreateCell(2);
                                            cell.CellStyle = cellStyle;
                                            cell.SetCellValue("");
                                            //设备材料大类
                                            cell = row.CreateCell(3);
                                            cell.CellStyle = cellStyle;
                                            cell.SetCellValue("");
                                            //设备材料分类
                                            cell = row.CreateCell(4);
                                            cell.CellStyle = cellStyle;
                                            cell.SetCellValue(equipmentMaterialType.EquipmentMaterialTypeName);
                                            var lists = costControls.Where(x => x.EquipmentMaterialTypeId == equipmentMaterialType.EquipmentMaterialTypeId && x.InstallationId == ins.InstallationId);
                                            if (lists.Count() > 0)
                                            {
                                                var cellValue1 = "";
                                                //单位
                                                cell = row.CreateCell(5);
                                                cell.CellStyle = cellStyle;
                                                cell.SetCellValue(lists.First().Unit);
                                                //合同工作量row5[4]
                                                cellValue1 = lists.ToList().Sum(x => x.TotalNum ?? 0).ToString();
                                                cell = row.CreateCell(6);
                                                cell.CellStyle = cellStyle;
                                                cell.SetCellValue(cellValue1);
                                                //本月完成量row5[5] 
                                                var list2s = costControlDetails.Where(x => x.EquipmentMaterialTypeId == equipmentMaterialType.EquipmentMaterialTypeId && x.InstallationId == ins.InstallationId && x.Months == Funs.GetNewDateTime(date));
                                                var cellValue2 = list2s.ToList().Sum(x => x.ThisNum ?? 0).ToString();
                                                cell = row.CreateCell(7);
                                                cell.CellStyle = cellStyle;
                                                cell.SetCellValue(cellValue2);
                                                //累计完成量row5[6]
                                                var list3s = costControlDetails.Where(x => x.EquipmentMaterialTypeId == equipmentMaterialType.EquipmentMaterialTypeId && x.InstallationId == ins.InstallationId);
                                                var cellValue3 = list3s.ToList().Sum(x => x.ThisNum ?? 0).ToString();
                                                cell = row.CreateCell(8);
                                                cell.CellStyle = cellStyle;
                                                cell.SetCellValue(cellValue3);
                                                //本月完成率
                                                var cellValue4 = "";
                                                cell = row.CreateCell(9);
                                                cell.CellStyle = cellStyle;
                                                if (cellValue1 != "0" && cellValue2 != "0")
                                                {
                                                    cellValue4 = (Funs.GetNewDecimalOrZero(cellValue2) / Funs.GetNewDecimalOrZero(cellValue1) * 100).ToString("0.##") + "%";
                                                }
                                                else
                                                {
                                                    cellValue4 = "/";
                                                }
                                                cell.SetCellValue(cellValue4);
                                                //累计完成率
                                                var cellValue5 = "";
                                                if (cellValue1 != "0" && cellValue3 != "0")
                                                {
                                                    cellValue5 = (Funs.GetNewDecimalOrZero(cellValue3) / Funs.GetNewDecimalOrZero(cellValue1) * 100).ToString("0.##") + "%";
                                                }
                                                else
                                                {
                                                    cellValue5 = "/";
                                                }
                                                cell = row.CreateCell(10);
                                                cell.CellStyle = cellStyle;
                                                cell.SetCellValue(cellValue5);
                                            }
                                            else
                                            {
                                                //单位
                                                cell = row.CreateCell(5);
                                                cell.CellStyle = cellStyle;
                                                cell.SetCellValue("");
                                                //合同工作量row5[4]
                                                cell = row.CreateCell(6);
                                                cell.CellStyle = cellStyle;
                                                cell.SetCellValue("");
                                                //本月完成量row5[5] 
                                                cell = row.CreateCell(7);
                                                cell.CellStyle = cellStyle;
                                                cell.SetCellValue("");
                                                //累计完成量row5[6]
                                                cell = row.CreateCell(8);
                                                cell.CellStyle = cellStyle;
                                                cell.SetCellValue("");
                                                //本月完成率
                                                cell = row.CreateCell(9);
                                                cell.CellStyle = cellStyle;
                                                cell.SetCellValue("");
                                                //累计完成率
                                                cell = row.CreateCell(10);
                                                cell.CellStyle = cellStyle;
                                                cell.SetCellValue("");
                                            }
                                            f++;
                                        }
                                        d++;
                                    }
                                    w++;
                                    #endregion
                                }
                                v++;
                            }
                            #endregion
                            #endregion
                            // 第三步:写入文件流
                            using (FileStream stream = new FileStream(newUrl, FileMode.Create, FileAccess.Write))
                            {
                                workbook.Write(stream);
                                workbook.Close();
                            }
                            string fileName = Path.GetFileName(newUrl);
                            FileInfo info = new FileInfo(newUrl);
                            long fileSize = info.Length;
                            Response.Clear();
                            Response.ContentType = "application/x-zip-compressed";
                            Response.AddHeader("Content-Disposition", "attachment;filename=" + System.Web.HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8));
                            Response.AddHeader("Content-Length", fileSize.ToString());
                            Response.TransmitFile(newUrl, 0, fileSize);
                            Response.Flush();
                            Response.Close();
                            File.Delete(newUrl);
                        }
                        catch (Exception ex)
                        {
                            throw ex;
                        }
                    }
                    else
                    {
                        ShowNotify("没有数据,无法导出!", MessageBoxIcon.Warning);
                    }
                }
            }
            else
            {
                ShowNotify("请选择月份!", MessageBoxIcon.Warning);
            }
        }
        #endregion
        //public void AutoColumnWidth(HSSFSheet sheet, int cols)
        //{
        //    for (int col = 0; col <= cols; col++)
        //    {
        //        sheet.AutoSizeColumn(col);//自适应宽度,但是其实还是比实际文本要宽
        //        int columnWidth = sheet.GetColumnWidth(col) / 256;//获取当前列宽度
        //        for (int rowIndex = 0; rowIndex <= sheet.LastRowNum; rowIndex++)
        //        {
        //            HSSFRow row = sheet.GetRow(rowIndex);
        //            if (row!=null)
        //            {
        //                HSSFCell cell = row.GetCell(col);
        //                if (cell!=null)
        //                {
        //                    int contextLength = Encoding.UTF8.GetBytes(cell.ToString()).Length;//获取当前单元格的内容宽度
        //                    columnWidth = columnWidth < contextLength ? contextLength : columnWidth;
        //                    sheet.SetColumnWidth(col, columnWidth * 200);//
        //                }
        //            }
        //        }
        //    }
        //}
    }
}