268 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			C#
		
	
	
	
			
		
		
	
	
			268 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			C#
		
	
	
	
using BLL;
 | 
						|
using BLL.Common;
 | 
						|
using NPOI.SS.UserModel;
 | 
						|
using System;
 | 
						|
using System.Collections.Generic;
 | 
						|
using System.IO;
 | 
						|
using System.Linq;
 | 
						|
using System.Web;
 | 
						|
 | 
						|
namespace FineUIPro.Web.common
 | 
						|
{
 | 
						|
    public class ExportExcel : PageBase
 | 
						|
    {
 | 
						|
        NPOIExcel excel;
 | 
						|
 | 
						|
        //构造 采用模板方式
 | 
						|
        public ExportExcel(string tempPath)
 | 
						|
        {
 | 
						|
            excel = new NPOIExcel(tempPath);
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// 流的形式
 | 
						|
        /// </summary>
 | 
						|
        /// <returns></returns>
 | 
						|
        private MemoryStream WriteToStream()
 | 
						|
        {
 | 
						|
            return excel.Save();
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// 导出
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="eprojectId">主键</param>
 | 
						|
        /// <param name="fileName">导出文件名称</param>
 | 
						|
        public void PPKToExcel(string eprojectId, string fileName)
 | 
						|
        {
 | 
						|
            HttpContext.Current.Response.ContentType = "application/vnd.ms-excel";
 | 
						|
           // HttpContext.Current.Response.ContentType = "application/excel";
 | 
						|
            HttpContext.Current.Response.AddHeader("Content-Disposition", string.Format("attachment;filename={0}", HttpUtility.UrlEncode(fileName)));
 | 
						|
            //HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.GetEncoding("utf-8");
 | 
						|
            HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.UTF8;
 | 
						|
            HttpContext.Current.Response.Clear();
 | 
						|
            ISheet sheet;
 | 
						|
            sheet = excel.ActiveSheet;
 | 
						|
            sheet.ForceFormulaRecalculation = true;   //允许excel里的公式生效
 | 
						|
 | 
						|
            ICellStyle style = excel.CreateCellStyle();
 | 
						|
            style.BorderBottom = BorderStyle.Thin;
 | 
						|
            style.BorderLeft = BorderStyle.Thin;
 | 
						|
            style.BorderRight = BorderStyle.Thin;
 | 
						|
            style.BorderTop = BorderStyle.Thin;
 | 
						|
            style.WrapText = true;
 | 
						|
            style.VerticalAlignment = VerticalAlignment.Center;
 | 
						|
            ///////////////
 | 
						|
            ICellStyle styleGray = excel.CreateCellStyle();
 | 
						|
            styleGray.FillForegroundColor = NPOI.HSSF.Util.HSSFColor.Grey40Percent.Index;
 | 
						|
            styleGray.FillPattern = FillPattern.SolidForeground;//设置背景是否填充           
 | 
						|
            styleGray.FillBackgroundColor = NPOI.HSSF.Util.HSSFColor.Grey40Percent.Index;
 | 
						|
            styleGray.VerticalAlignment = VerticalAlignment.Center;
 | 
						|
 | 
						|
            var eProject = BLL.EProjectService.GeteProjectById(eprojectId);
 | 
						|
            var ss = BLL.CostReportService.GetCostReportByEProjectIdAndMonth(eprojectId, DateTime.Now.ToString("yyyy-MM"));
 | 
						|
 | 
						|
 | 
						|
            if (eProject != null)
 | 
						|
            {
 | 
						|
 | 
						|
                //第1行
 | 
						|
                excel.SetValue(0, 9, DateTime.Now.ToString("yyyy-MM-dd"));
 | 
						|
 | 
						|
                //第2行
 | 
						|
                excel.SetValue(1, 9, this.CurrUser.UserName);
 | 
						|
 | 
						|
                //第3行
 | 
						|
                excel.SetValue(2, 9, eProject.ProjectControl_JobNo);
 | 
						|
 | 
						|
                //第4行
 | 
						|
                excel.SetValue(3, 1, eProject.ProjectControl_JobTitle);
 | 
						|
                excel.SetValue(3, 9, eProject.ProjectControl_BUCode);
 | 
						|
 | 
						|
                //第5行
 | 
						|
                excel.SetValue(4, 9, eProject.ProjectControl_OrginalBudget);
 | 
						|
 | 
						|
                //第6行
 | 
						|
 | 
						|
                //第7行
 | 
						|
                //eProject.PM_SC_ApprovedQty=M  eProject.PM_SC_PendingQty=N
 | 
						|
 | 
						|
                string aps = "";
 | 
						|
 | 
						|
                if (Funs.GetNewDecimalOrZero(eProject.PM_SC_PendingQty.ToString()) > 0)
 | 
						|
                {
 | 
						|
                    aps = "C";
 | 
						|
                }
 | 
						|
                else if (Funs.GetNewDecimalOrZero(eProject.PM_SC_PendingQty.ToString()) == 0 && Funs.GetNewDecimalOrZero(eProject.PM_SC_ApprovedQty.ToString()) > 0)
 | 
						|
                {
 | 
						|
                    aps = "B";
 | 
						|
                }
 | 
						|
                else if (Funs.GetNewDecimalOrZero(eProject.PM_SC_ApprovedQty.ToString()) == 0 && Funs.GetNewDecimalOrZero(eProject.PM_SC_PendingQty.ToString()) == 0 )
 | 
						|
                {
 | 
						|
                    aps = "A";
 | 
						|
                }
 | 
						|
                else
 | 
						|
                {
 | 
						|
                    aps = "";
 | 
						|
                }
 | 
						|
                excel.SetValue(6, 1, aps);
 | 
						|
                string cbs = "";
 | 
						|
                if (ss != null)
 | 
						|
                {
 | 
						|
                    double cbchjs = Convert.ToDouble(((Funs.GetNewDecimalOrZero(ss.ActualCost.ToString()) + Funs.GetNewDecimalOrZero(ss.CommittedPRPO.ToString()) + Funs.GetNewDecimalOrZero(ss.CommittedSSRs.ToString()) + Funs.GetNewDecimalOrZero(ss.CostToComplete.ToString())) - Funs.GetNewDecimalOrZero(ss.OrginalBudget.ToString()) - Funs.GetNewDecimalOrZero(ss.ChangedBudget.ToString())) / (Funs.GetNewDecimalOrZero(ss.OrginalBudget.ToString()) + Funs.GetNewDecimalOrZero(ss.ChangedBudget.ToString())));
 | 
						|
 | 
						|
                    if (cbchjs > 0.1)
 | 
						|
                    {
 | 
						|
                        cbs = "C";
 | 
						|
                    }
 | 
						|
                    else if (cbchjs > 0.05 && cbchjs <= 0.1)
 | 
						|
                    {
 | 
						|
                        cbs = "B";
 | 
						|
                    }
 | 
						|
                    else if (cbchjs <= 0.05)
 | 
						|
                    {
 | 
						|
                        cbs = "A";
 | 
						|
                    }
 | 
						|
                    else
 | 
						|
                    {
 | 
						|
                        cbs = "";
 | 
						|
                    }
 | 
						|
                }
 | 
						|
                excel.SetValue(6, 3, cbs);
 | 
						|
 | 
						|
                // PM_MA_ProjectApproval=m ProjectControl_CM_SchEnd=x CM_CC_RevisedEnd=y
 | 
						|
                TimeSpan ts1 = Convert.ToDateTime(eProject.CM_CC_RevisedEnd) - Convert.ToDateTime(eProject.ProjectControl_CM_SchEnd);
 | 
						|
                double xy = ts1.Days;
 | 
						|
                TimeSpan ts2 = Convert.ToDateTime(eProject.ProjectControl_CM_SchEnd) - Convert.ToDateTime(eProject.PM_MA_ProjectApproval);
 | 
						|
                double xm = ts2.Days;
 | 
						|
 | 
						|
                double xym = xy / xm;
 | 
						|
                string xyms = "";
 | 
						|
                if (xym > 0.1)
 | 
						|
                {
 | 
						|
                    xyms = "C";
 | 
						|
                }
 | 
						|
                else if (xym > 0.05 && xym <= 0.1)
 | 
						|
                {
 | 
						|
                    xyms = "B";
 | 
						|
                }
 | 
						|
                else if (xym <= 0.05)
 | 
						|
                {
 | 
						|
                    xyms = "A";
 | 
						|
                }
 | 
						|
                else
 | 
						|
                {
 | 
						|
                    xyms = "";
 | 
						|
                }
 | 
						|
                excel.SetValue(6, 5, xyms);
 | 
						|
 | 
						|
                excel.SetValue(6, 8, eProject.PM_SC_ApprovedQty);
 | 
						|
                excel.SetValue(6, 9, eProject.PM_SC_ApprovedCost);
 | 
						|
 | 
						|
                //第8行
 | 
						|
                excel.SetValue(7, 8, eProject.PM_SC_PendingQty);
 | 
						|
                excel.SetValue(7, 9, eProject.PM_SC_PendingCost);
 | 
						|
 | 
						|
                //第11行
 | 
						|
                excel.SetValue(10, 3, eProject.ProjectControl_CC_SchStart);
 | 
						|
                excel.SetValue(10, 4, eProject.ProjectControl_CC_SchEnd);
 | 
						|
                excel.SetValue(10, 6, eProject.ProjectControl_CC_Progress);
 | 
						|
                //excel.SetValue(10, 7, eProject.pro);
 | 
						|
                //excel.SetValue(10, 8, eProject.);
 | 
						|
                //excel.SetValue(10, 9, eProject.);
 | 
						|
 | 
						|
                //第12行
 | 
						|
                excel.SetValue(11, 3, eProject.ProjectControl_CM_SchStart);
 | 
						|
                excel.SetValue(11, 4, eProject.ProjectControl_CM_SchEnd);
 | 
						|
                excel.SetValue(11, 6, eProject.ProjectControl_CM_Progress);
 | 
						|
                //excel.SetValue(11, 7, eProject.);
 | 
						|
                //excel.SetValue(11, 8, eProject.);
 | 
						|
                //excel.SetValue(11, 9, eProject.);
 | 
						|
 | 
						|
                //第13行
 | 
						|
                excel.SetValue(12, 3, eProject.ProjectControl_LP_SchStart);
 | 
						|
                excel.SetValue(12, 4, eProject.ProjectControl_LP_SchEnd);
 | 
						|
                excel.SetValue(12, 6, eProject.ProjectControl_LP_Progress);
 | 
						|
                excel.SetValue(12, 7, eProject.PM_LLEP_RevisedStart);
 | 
						|
                excel.SetValue(12, 8, eProject.PM_LLEP_RevisedEnd);
 | 
						|
                excel.SetValue(12, 9, eProject.PM_LLEP_ActualProgress);
 | 
						|
 | 
						|
                //第14行
 | 
						|
                // excel.SetValue(13, 3, eProject.);
 | 
						|
                //excel.SetValue(13, 4, eProject.);
 | 
						|
                excel.SetValue(13, 6, eProject.CM_CC_RevisedStart);
 | 
						|
                excel.SetValue(13, 7, eProject.CM_CC_RevisedEnd);
 | 
						|
                // excel.SetValue(13, 8, eProject.);
 | 
						|
                excel.SetValue(13, 9, eProject.CM_CC_AcutalProgress);
 | 
						|
 | 
						|
                //第15行
 | 
						|
                //excel.SetValue(14, 3, eProject.CM_CM_RevisedStart);
 | 
						|
                //excel.SetValue(14, 4, eProject.);
 | 
						|
                excel.SetValue(14, 6, eProject.CM_CM_RevisedStart);
 | 
						|
                excel.SetValue(14, 7, eProject.CM_CM_RevisedEnd);
 | 
						|
                // excel.SetValue(14, 8, "");
 | 
						|
                excel.SetValue(14, 9, eProject.CM_CM_AcutalProgress);
 | 
						|
 | 
						|
                //第16行
 | 
						|
                //excel.SetValue(15, 3, eProject.);
 | 
						|
                excel.SetValue(15, 4, eProject.ProjectControl_MS_MC);
 | 
						|
                //excel.SetValue(15, 6, eProject.);
 | 
						|
                excel.SetValue(15, 7, eProject.CM_MA_MC);
 | 
						|
                //excel.SetValue(15, 8, eProject.);
 | 
						|
                // excel.SetValue(15, 9, eProject.);
 | 
						|
 | 
						|
 | 
						|
                if (ss != null)
 | 
						|
                {
 | 
						|
                    string cbchj = "";
 | 
						|
                    if (ss!=null)
 | 
						|
                    {
 | 
						|
                        //第19行
 | 
						|
                        excel.SetValue(18, 0, ss.OrginalBudget);
 | 
						|
                        excel.SetValue(18, 1, ss.ActualCost);
 | 
						|
 | 
						|
                        decimal? acs = ss.CommittedPRPO + ss.CommittedSSRs;
 | 
						|
                        excel.SetValue(18, 2, acs);
 | 
						|
 | 
						|
                        excel.SetValue(19, 3, ss.CostToComplete);
 | 
						|
 | 
						|
                        decimal? cb = ss.ActualCost + ss.CommittedPRPO + ss.CommittedSSRs + ss.CostToComplete;
 | 
						|
                        excel.SetValue(18, 4, cb);
 | 
						|
 | 
						|
 | 
						|
                       cbchj = Convert.ToString(((cb - ss.OrginalBudget - ss.ChangedBudget) / (ss.OrginalBudget + ss.ChangedBudget) * 100)) + "%";
 | 
						|
                    }
 | 
						|
                   
 | 
						|
                    excel.SetValue(18, 5, cbchj);
 | 
						|
                }
 | 
						|
 | 
						|
 | 
						|
                //第22行
 | 
						|
                excel.SetValue(21, 0, eProject.PM_Remarks_Engineering);
 | 
						|
 | 
						|
                //第24行
 | 
						|
                excel.SetValue(23, 0, eProject.PM_Remarks_Procurement);
 | 
						|
 | 
						|
                //第27行
 | 
						|
                excel.SetValue(26, 0, eProject.CM_Remarks_Construction);
 | 
						|
 | 
						|
                //第29行
 | 
						|
                excel.SetValue(28, 0, eProject.CM_Remarks_QualityHSE);
 | 
						|
 | 
						|
                //第31行
 | 
						|
                //excel.SetValue(30, 0, eProject.ar);
 | 
						|
 | 
						|
                //第34行
 | 
						|
                excel.SetValue(33, 0, eProject.ProjectControl_ProjectManager);
 | 
						|
 | 
						|
                //第36行
 | 
						|
                excel.SetValue(35, 0, eProject.ProjectControl_ConstManager);
 | 
						|
 | 
						|
            }
 | 
						|
            byte[] fs;
 | 
						|
            fs = WriteToStream().ToArray();
 | 
						|
            HttpContext.Current.Response.BinaryWrite(WriteToStream().GetBuffer());
 | 
						|
            HttpContext.Current.Response.End();
 | 
						|
        }
 | 
						|
    }
 | 
						|
} |