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();
|
|
}
|
|
}
|
|
} |