3522 lines
		
	
	
		
			225 KiB
		
	
	
	
		
			C#
		
	
	
	
			
		
		
	
	
			3522 lines
		
	
	
		
			225 KiB
		
	
	
	
		
			C#
		
	
	
	
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 查询
 | 
						||
        /// <summary>
 | 
						||
        /// 查询按钮
 | 
						||
        /// </summary>
 | 
						||
        /// <param name="sender"></param>
 | 
						||
        /// <param name="e"></param>
 | 
						||
        protected void btnSearch_Click(object sender, EventArgs e)
 | 
						||
        {
 | 
						||
            GetValue();
 | 
						||
        }
 | 
						||
        #endregion
 | 
						||
 | 
						||
        #region 关闭弹出窗口
 | 
						||
        /// <summary>
 | 
						||
        /// 关闭窗口
 | 
						||
        /// </summary>
 | 
						||
        /// <param name="sender"></param>
 | 
						||
        /// <param name="e"></param>
 | 
						||
        protected void Window1_Close(object sender, WindowCloseEventArgs e)
 | 
						||
        {
 | 
						||
            if (!string.IsNullOrEmpty(this.txtMonths.Text.Trim()))
 | 
						||
            {
 | 
						||
                GetValue();
 | 
						||
            }
 | 
						||
            else
 | 
						||
            {
 | 
						||
                ShowNotify("请选择月份", MessageBoxIcon.Warning);
 | 
						||
            }
 | 
						||
        }
 | 
						||
        #endregion
 | 
						||
 | 
						||
        #region 导出按钮
 | 
						||
        /// 导出按钮
 | 
						||
        /// </summary>
 | 
						||
        /// <param name="sender"></param>
 | 
						||
        /// <param name="e"></param>
 | 
						||
        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);//
 | 
						||
        //                }
 | 
						||
        //            }
 | 
						||
 | 
						||
        //        }
 | 
						||
        //    }
 | 
						||
        //}
 | 
						||
 | 
						||
    }
 | 
						||
} |