using System;
using System.Collections.Generic;
using System.IO;
using System.Web;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data;
using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel;
using NPOI.XSSF;
using System.Text;
using NPOI.SS.Util;
using NPOI.SS.Formula.Eval;
namespace TMC.Opti_PlatForm.Timer.CLASS
{
public class Generate_LTE_Post_Evaluation_Report : System.Web.UI.Page
{
public string Generate_LTE_Post_Evaluation_Report2(string enodeb_name, string date, string enodebid, string city, string config, string station_type, string address)
{
Model.RETURN_RESULT r = new Model.RETURN_RESULT();
r.result = "1";
r.data = "success"; //默认值
string basePath = Environment.CurrentDirectory;
string excelModelPath = basePath + "\\excel\\template\\LTE单站后评估报告模板\\LTE单站后评估报告模板.xlsx";
string base_export_path = basePath + "\\UpPostFile\\" + DateTime.Now.ToString("yyyyMMdd")+"\\";
if (!File.Exists(excelModelPath))
{
r.data = "报表模版不存在";
r.result = "-1";
return Newtonsoft.Json.JsonConvert.SerializeObject(r);
}
if (!Directory.Exists(base_export_path))
{
Directory.CreateDirectory(base_export_path);
}
string export_path = base_export_path + "LTE单站后评估报告_" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".xlsx";
DataSet ds = ImportExceltoDs(File.OpenRead(excelModelPath));
DataTable dt_rate = new DataTable(); //存储各种比率的表
dt_rate.Columns.Add("SCAN_START_TIME");
dt_rate.Columns.Add("RRC连接建立成功率");
dt_rate.Columns.Add("E-RAB建立成功率");
dt_rate.Columns.Add("无线接通率");
dt_rate.Columns.Add("无线掉线率(小区级)");
dt_rate.Columns.Add("无线接通率(QCI=1)");
dt_rate.Columns.Add("E-RAB掉线率(QCI=1)");
dt_rate.Columns.Add("eNB间切换成功率");
dt_rate.Columns.Add("eNB内切换成功率");
dt_rate.Columns.Add("切换成功率");
dt_rate.Columns.Add("eSRVCC切换成功率");
dt_rate.Columns.Add("VoLTE用户切换成功率(QCI=1)");
dt_rate.Columns.Add("MR(小于-110dbm采样点占比)");
IWorkbook workbook = null;
ISheet sheet = null;
ISheet sheet_alarmList = null;
ISheet sheet_alarmMonitor = null;
ISheet sheet_report = null;
ISheet sheet_problemsSum = null;
ISheet sheet_zhibiaoDefinition = null;
string fileName = excelModelPath;
try
{
// 2007版本
if (fileName.IndexOf(".xlsx") > 0)
workbook = new XSSFWorkbook();
// 2003版本
//else if (fileName.IndexOf(".xls") > 0)
//workbook = new HSSFWorkbook();
sheet_report = workbook.CreateSheet("报告页");
sheet_alarmList = workbook.CreateSheet("重要告警列表");
sheet_alarmMonitor = workbook.CreateSheet("站点重要告警监控");
sheet = workbook.CreateSheet("站点后台指标监控");
sheet_problemsSum = workbook.CreateSheet("问题汇总");
sheet_zhibiaoDefinition = workbook.CreateSheet("指标定义");
XSSFCellStyle headStyle = workbook.CreateCellStyle() as XSSFCellStyle; //2007
headStyle.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Center;
XSSFFont font = workbook.CreateFont() as XSSFFont;
font.FontHeightInPoints = 10;
font.Boldweight = 700;
headStyle.SetFont(font);
IDataFormat dataformat = workbook.CreateDataFormat();
ICellStyle cellStyle_per = workbook.CreateCellStyle();
cellStyle_per.DataFormat = dataformat.GetFormat("0.00%");//百分数【小数点后有几个0表示精确到显示小数点后几位】
ICellStyle date_style = workbook.CreateCellStyle();
date_style.DataFormat = dataformat.GetFormat("yyyy年MM月dd日");
XSSFCellStyle leftStyle = workbook.CreateCellStyle() as XSSFCellStyle; //2007
leftStyle.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Left;
DataTable dt_siteMonitor = ds.Tables[3]; //站点后台指标监控
//取得列的数量
int[] arrColWidth_siteMonitor = new int[dt_siteMonitor.Columns.Count]; //模板中获取 站点后台指标监控 列的数量
foreach (DataColumn item in dt_siteMonitor.Columns)
{
arrColWidth_siteMonitor[item.Ordinal] = Encoding.GetEncoding(936).GetBytes(item.ColumnName.ToString()).Length; //计算列宽的长度
}
string start_time = Convert.ToDateTime(date).AddDays(1).ToString("yyyy-MM-dd");
string end_time = Convert.ToDateTime(start_time).AddDays(6).ToString("yyyy-MM-dd");
BLL.DW dw = new BLL.DW();
string sql = "select f.SCAN_START_TIME,f.ENODEB_NAME,f.CELL_LC_NAME,f.CELL_CI,f.VOLTE_PDCP_UPOCT_QC1,f.VOLTE_PDCP_UPOCT_QC2,f.PDCP_UPOCTUL_TUNTU,f.PDCP_UPOCTDL_TUNTU,f.RRC_ATTCONNESTAB,f.RRC_SUCCCONNESTAB,f.ERAB_NBRATTESTAB,f.ERAB_NBRSUCCESTAB,f.CONTEXT_ATTRELENB,f.CONTEXT_ATTRELENB_NORMAL,f.CONTEXT_SUCCINITALSETUP,f.CONTEXT_NBRLEFT,f.ERAB_HOFAIL,f.ERAB_NBRREQRELENB," +
"f.ERAB_NBRLEFT,f.ERAB_NBRHOINC,f.ERAB_NBRSUCCESTAB_QC1,f.ERAB_NBRATTESTAB_QC1,f.HO_SUCCOUTINTERENBS1,f.HO_SUCCOUTINTERENBX2,f.HO_ATTOUTINTERENBS1,f.HO_ATTOUTINTERENBX2,f.NbrReqRelEnb_Normal,f.ERAB_NBRREQRELENB_QC1,f.ERAB_HOFAIL_QC1,f.ERAB_NBRLEFT_QC1,f.ERAB_NBRHOINC_QC1,f.ERAB_NRRELE_NORMAL_QC1,f.HO_SUCCOUTINTRAENB,f.HO_ATTOUTINTRAENB,f.IRATHO_SUCCOUTGERAN,f.IRATHO_ATTOUTGERAN," +
"f.HO_SUCCOUTINTERENBS1_1,f.HO_SUCCOUTINTERENBX2_1,f.HO_SUCCOUTINTRAENB_1,f.HO_ATTOUTINTERENBS1_1,f.HO_ATTOUTINTERENBX2_1,f.HO_ATTOUTINTRAENB_1," +
" g.RSRP_COUNT, g.RSRP_00_06 from (select * from sts_lte_cell_day@Topdb30 where SCAN_START_TIME >= to_date('" + start_time + "','yyyy-mm-dd') and SCAN_START_TIME <= to_date('" + end_time + "','yyyy-mm-dd') and ENODEB_NAME='" + enodeb_name + "')f left join STS_LTE_CELL_RSRP_DAY@Topdb30 g on f.CELL_CI = g.CELL_ID order by f.SCAN_START_TIME asc";
DataTable dt = new DataTable();
dt = dw.GetTableBySqlString(sql).Tables[0];
//dt = dt_siteMonitor; //模拟表数据
int iRow = 1; //初始行号
for (int i = 0; i < dt.Rows.Count; i++)
{
for (int j = 0; j < dt.Columns.Count; j++)
{
int intTemp = Encoding.GetEncoding(936).GetBytes(dt.Rows[i][j].ToString()).Length; //计算单元格的长度
if (intTemp > arrColWidth_siteMonitor[j]) //如果单元格的长度大于列宽的长度就设置列宽为单元格的长度
{
arrColWidth_siteMonitor[j] = intTemp;
}
}
#region 写单元格
IRow row = sheet.CreateRow(iRow + i);
string SCAN_START_TIME = dt.Rows[i]["SCAN_START_TIME"].ToString().Trim();
//string SCAN_START_TIME = dt.Rows[i][0].ToString().Trim();
row.CreateCell(0).SetCellValue(SCAN_START_TIME);
string ENODEB_NAME = dt.Rows[i]["ENODEB_NAME"].ToString().Trim();
//string ENODEB_NAME = dt.Rows[i][1].ToString().Trim();
row.CreateCell(1).SetCellValue(ENODEB_NAME);
string CELL_LC_NAME = dt.Rows[i]["CELL_LC_NAME"].ToString().Trim();
//string CELL_LC_NAME = dt.Rows[i][2].ToString().Trim();
row.CreateCell(2).SetCellValue(CELL_LC_NAME);
string CELL_CI = dt.Rows[i]["CELL_CI"].ToString().Trim();
//string CELL_CI = dt.Rows[i][3].ToString().Trim();
row.CreateCell(3).SetCellValue(CELL_CI);
string VOLTE_PDCP_UPOCT_QC1 = dt.Rows[i]["VOLTE_PDCP_UPOCT_QC1"].ToString().Trim(); //VoLTE语音总流量
//string VOLTE_PDCP_UPOCT_QC1 = dt.Rows[i][4].ToString().Trim(); //VoLTE语音总流量
row.CreateCell(4).SetCellValue(VOLTE_PDCP_UPOCT_QC1);
string VOLTE_PDCP_UPOCT_QC2 = dt.Rows[i]["VOLTE_PDCP_UPOCT_QC2"].ToString().Trim(); //volte视频总流量
//string VOLTE_PDCP_UPOCT_QC2 = dt.Rows[i][5].ToString().Trim(); //volte视频总流量
row.CreateCell(5).SetCellValue(VOLTE_PDCP_UPOCT_QC2);
string PDCP_UPOCTUL_TUNTU = dt.Rows[i]["PDCP_UPOCTUL_TUNTU"].ToString().Trim(); //自_PDCP层上行流量_Eutrancell
//string PDCP_UPOCTUL_TUNTU = dt.Rows[i][6].ToString().Trim(); //自_PDCP层上行流量_Eutrancell
row.CreateCell(6).SetCellValue(PDCP_UPOCTUL_TUNTU);
string PDCP_UPOCTDL_TUNTU = dt.Rows[i]["PDCP_UPOCTDL_TUNTU"].ToString().Trim(); //自_PDCP层下行流量_Eutrancell
//string PDCP_UPOCTDL_TUNTU = dt.Rows[i][7].ToString().Trim(); //自_PDCP层下行流量_Eutrancell
row.CreateCell(7).SetCellValue(PDCP_UPOCTDL_TUNTU);
string RRC_ATTCONNESTAB = dt.Rows[i]["RRC_ATTCONNESTAB"].ToString().Trim(); //RRC连接建立请求次数
//string RRC_ATTCONNESTAB = dt.Rows[i][8].ToString().Trim(); //RRC连接建立请求次数
row.CreateCell(8).SetCellValue(RRC_ATTCONNESTAB);
string RRC_SUCCCONNESTAB = dt.Rows[i]["RRC_SUCCCONNESTAB"].ToString().Trim(); //RRC连接建立成功次数
//string RRC_SUCCCONNESTAB = dt.Rows[i][9].ToString().Trim(); //RRC连接建立成功次数
row.CreateCell(9).SetCellValue(RRC_SUCCCONNESTAB);
string ERAB_NBRATTESTAB = dt.Rows[i]["ERAB_NBRATTESTAB"].ToString().Trim(); //E-RAB建立请求数
//string ERAB_NBRATTESTAB = dt.Rows[i][10].ToString().Trim(); //E-RAB建立请求数
row.CreateCell(10).SetCellValue(ERAB_NBRATTESTAB);
string ERAB_NBRSUCCESTAB = dt.Rows[i]["ERAB_NBRSUCCESTAB"].ToString().Trim(); //E-RAB建立成功数
//string ERAB_NBRSUCCESTAB = dt.Rows[i][11].ToString().Trim(); //E-RAB建立成功数
row.CreateCell(11).SetCellValue(ERAB_NBRSUCCESTAB);
string CONTEXT_ATTRELENB = dt.Rows[i]["CONTEXT_ATTRELENB"].ToString().Trim(); //eNB请求释放上下文数
//string CONTEXT_ATTRELENB = dt.Rows[i][12].ToString().Trim(); //eNB请求释放上下文数
row.CreateCell(12).SetCellValue(CONTEXT_ATTRELENB);
string CONTEXT_ATTRELENB_NORMAL = dt.Rows[i]["CONTEXT_ATTRELENB_NORMAL"].ToString().Trim(); //正常的eNB请求释放上下文数
//string CONTEXT_ATTRELENB_NORMAL = dt.Rows[i][13].ToString().Trim(); //正常的eNB请求释放上下文数
row.CreateCell(13).SetCellValue(CONTEXT_ATTRELENB_NORMAL);
string CONTEXT_SUCCINITALSETUP = dt.Rows[i]["CONTEXT_SUCCINITALSETUP"].ToString().Trim(); //初始上下文建立成功次数
//string CONTEXT_SUCCINITALSETUP = dt.Rows[i][14].ToString().Trim(); //初始上下文建立成功次数
row.CreateCell(14).SetCellValue(CONTEXT_SUCCINITALSETUP);
string CONTEXT_NBRLEFT = dt.Rows[i]["CONTEXT_NBRLEFT"].ToString().Trim(); //遗留上下文个数
//string CONTEXT_NBRLEFT = dt.Rows[i][15].ToString().Trim(); //遗留上下文个数
row.CreateCell(15).SetCellValue(CONTEXT_NBRLEFT);
string ERAB_HOFAIL = dt.Rows[i]["ERAB_HOFAIL"].ToString().Trim(); //切出失败的E-RAB数
//string ERAB_HOFAIL = dt.Rows[i][16].ToString().Trim(); //切出失败的E-RAB数
row.CreateCell(16).SetCellValue(ERAB_HOFAIL);
string ERAB_NBRREQRELENB = dt.Rows[i]["ERAB_NBRREQRELENB"].ToString().Trim(); //eNB请求释放的E-RAB数
//string ERAB_NBRREQRELENB = dt.Rows[i][17].ToString().Trim(); //eNB请求释放的E-RAB数
row.CreateCell(17).SetCellValue(ERAB_NBRREQRELENB);
string ERAB_NBRLEFT = dt.Rows[i]["ERAB_NBRLEFT"].ToString().Trim(); //遗留E-RAB个数
//string ERAB_NBRLEFT = dt.Rows[i][18].ToString().Trim(); //遗留E-RAB个数
row.CreateCell(18).SetCellValue(ERAB_NBRLEFT);
string ERAB_NBRHOINC = dt.Rows[i]["ERAB_NBRHOINC"].ToString().Trim(); //切换入E-RAB数
//string ERAB_NBRHOINC = dt.Rows[i][19].ToString().Trim(); //切换入E-RAB数
row.CreateCell(19).SetCellValue(ERAB_NBRHOINC);
string ERAB_NBRSUCCESTAB_QC1 = dt.Rows[i]["ERAB_NBRSUCCESTAB_QC1"].ToString().Trim(); //E-RAB建立成功数(QCI=1)
//string ERAB_NBRSUCCESTAB_QC1 = dt.Rows[i][20].ToString().Trim(); //E-RAB建立成功数(QCI=1)
row.CreateCell(20).SetCellValue(ERAB_NBRSUCCESTAB_QC1);
string ERAB_NBRATTESTAB_QC1 = dt.Rows[i]["ERAB_NBRATTESTAB_QC1"].ToString().Trim(); //E-RAB建立请求数(QCI=1)
//string ERAB_NBRATTESTAB_QC1 = dt.Rows[i][21].ToString().Trim(); //E-RAB建立请求数(QCI=1)
row.CreateCell(21).SetCellValue(ERAB_NBRATTESTAB_QC1);
string HO_SUCCOUTINTERENBS1 = dt.Rows[i]["HO_SUCCOUTINTERENBS1"].ToString().Trim(); //eNB间S1切换出成功次数
//string HO_SUCCOUTINTERENBS1 = dt.Rows[i][22].ToString().Trim(); //eNB间S1切换出成功次数
row.CreateCell(22).SetCellValue(HO_SUCCOUTINTERENBS1);
string HO_SUCCOUTINTERENBX2 = dt.Rows[i]["HO_SUCCOUTINTERENBX2"].ToString().Trim(); //eNB间X2切换出成功次数
//string HO_SUCCOUTINTERENBX2 = dt.Rows[i][23].ToString().Trim(); //eNB间X2切换出成功次数
row.CreateCell(23).SetCellValue(HO_SUCCOUTINTERENBX2);
string HO_ATTOUTINTERENBS1 = dt.Rows[i]["HO_ATTOUTINTERENBS1"].ToString().Trim(); //eNB间S1切换出请求次数
//string HO_ATTOUTINTERENBS1 = dt.Rows[i][24].ToString().Trim(); //eNB间S1切换出请求次数
row.CreateCell(24).SetCellValue(HO_ATTOUTINTERENBS1);
string HO_ATTOUTINTERENBX2 = dt.Rows[i]["HO_ATTOUTINTERENBX2"].ToString().Trim(); //eNB间X2切换出请求次数
//string HO_ATTOUTINTERENBX2 = dt.Rows[i][25].ToString().Trim(); //eNB间X2切换出请求次数
row.CreateCell(25).SetCellValue(HO_ATTOUTINTERENBX2);
string NbrReqRelEnb_Normal = dt.Rows[i]["NbrReqRelEnb_Normal"].ToString().Trim(); //正常的eNB请求释放的E-RAB数
//string NbrReqRelEnb_Normal = dt.Rows[i][26].ToString().Trim(); //正常的eNB请求释放的E-RAB数
row.CreateCell(26).SetCellValue(NbrReqRelEnb_Normal);
string ERAB_NBRREQRELENB_QC1 = dt.Rows[i]["ERAB_NBRREQRELENB_QC1"].ToString().Trim(); //eNB请求释放的E-RAB数(QCI=1)
//string ERAB_NBRREQRELENB_QC1 = dt.Rows[i][27].ToString().Trim(); //eNB请求释放的E-RAB数(QCI=1)
row.CreateCell(27).SetCellValue(ERAB_NBRREQRELENB_QC1);
string ERAB_HOFAIL_QC1 = dt.Rows[i]["ERAB_HOFAIL_QC1"].ToString().Trim(); //切出失败的E-RAB数(QCI=1)
//string ERAB_HOFAIL_QC1 = dt.Rows[i][28].ToString().Trim(); //切出失败的E-RAB数(QCI=1)
row.CreateCell(28).SetCellValue(ERAB_HOFAIL_QC1);
string ERAB_NBRLEFT_QC1 = dt.Rows[i]["ERAB_NBRLEFT_QC1"].ToString().Trim(); //遗留E-RAB数(QCI=1)
//string ERAB_NBRLEFT_QC1 = dt.Rows[i][29].ToString().Trim(); //遗留E-RAB数(QCI=1)
row.CreateCell(29).SetCellValue(ERAB_NBRLEFT_QC1);
string ERAB_NBRHOINC_QC1 = dt.Rows[i]["ERAB_NBRHOINC_QC1"].ToString().Trim(); //切换入E-RAB数(QCI=1)
//string ERAB_NBRHOINC_QC1 = dt.Rows[i][30].ToString().Trim(); //切换入E-RAB数(QCI=1)
row.CreateCell(30).SetCellValue(ERAB_NBRHOINC_QC1);
string ERAB_NRRELE_NORMAL_QC1 = dt.Rows[i]["ERAB_NRRELE_NORMAL_QC1"].ToString().Trim(); //正常eNB请求释放的E-RAB数(QCI=1)
//string ERAB_NRRELE_NORMAL_QC1 = dt.Rows[i][31].ToString().Trim(); //正常eNB请求释放的E-RAB数(QCI=1)
row.CreateCell(31).SetCellValue(ERAB_NRRELE_NORMAL_QC1);
string HO_SUCCOUTINTRAENB = dt.Rows[i]["HO_SUCCOUTINTRAENB"].ToString().Trim(); //eNB内切换出成功次数
//string HO_SUCCOUTINTRAENB = dt.Rows[i][32].ToString().Trim(); //eNB内切换出成功次数
row.CreateCell(32).SetCellValue(HO_SUCCOUTINTRAENB);
string HO_ATTOUTINTRAENB = dt.Rows[i]["HO_ATTOUTINTRAENB"].ToString().Trim(); //eNB内切换出请求次数
//string HO_ATTOUTINTRAENB = dt.Rows[i][33].ToString().Trim(); //eNB内切换出请求次数
row.CreateCell(33).SetCellValue(HO_ATTOUTINTRAENB);
string IRATHO_SUCCOUTGERAN = dt.Rows[i]["IRATHO_SUCCOUTGERAN"].ToString().Trim(); //切换至2G成功次数
//string IRATHO_SUCCOUTGERAN = dt.Rows[i][34].ToString().Trim(); //切换至2G成功次数
row.CreateCell(34).SetCellValue(IRATHO_SUCCOUTGERAN);
string IRATHO_ATTOUTGERAN = dt.Rows[i]["IRATHO_ATTOUTGERAN"].ToString().Trim(); //切换至2G请求次数
//string IRATHO_ATTOUTGERAN = dt.Rows[i][35].ToString().Trim(); //切换至2G请求次数
row.CreateCell(35).SetCellValue(IRATHO_ATTOUTGERAN);
string HO_SUCCOUTINTERENBS1_1 = dt.Rows[i]["HO_SUCCOUTINTERENBS1_1"].ToString().Trim(); //VoLTE用户eNB间S1切换出成功次数(QCI=1)
//string HO_SUCCOUTINTERENBS1_1 = dt.Rows[i][36].ToString().Trim(); //VoLTE用户eNB间S1切换出成功次数(QCI=1)
row.CreateCell(36).SetCellValue(HO_SUCCOUTINTERENBS1_1);
string HO_SUCCOUTINTERENBX2_1 = dt.Rows[i]["HO_SUCCOUTINTERENBX2_1"].ToString().Trim(); //VoLTE用户eNB间X2切换出成功次数(QCI=1)
//string HO_SUCCOUTINTERENBX2_1 = dt.Rows[i][37].ToString().Trim(); //VoLTE用户eNB间X2切换出成功次数(QCI=1)
row.CreateCell(37).SetCellValue(HO_SUCCOUTINTERENBX2_1);
string HO_SUCCOUTINTRAENB_1 = dt.Rows[i]["HO_SUCCOUTINTRAENB_1"].ToString().Trim(); //VoLTE用户eNB内切换出成功次数(QCI=1)
//string HO_SUCCOUTINTRAENB_1 = dt.Rows[i][38].ToString().Trim(); //VoLTE用户eNB内切换出成功次数(QCI=1)
row.CreateCell(38).SetCellValue(HO_SUCCOUTINTRAENB_1);
string HO_ATTOUTINTERENBS1_1 = dt.Rows[i]["HO_ATTOUTINTERENBS1_1"].ToString().Trim(); //VoLTE用户eNB间S1切换出请求次数(QCI=1)
//string HO_ATTOUTINTERENBS1_1 = dt.Rows[i][39].ToString().Trim(); //VoLTE用户eNB间S1切换出请求次数(QCI=1)
row.CreateCell(39).SetCellValue(HO_ATTOUTINTERENBS1_1);
string HO_ATTOUTINTERENBX2_1 = dt.Rows[i]["HO_ATTOUTINTERENBX2_1"].ToString().Trim(); //自_复制_VoLTE用户eNB间X2切换出请求次数_Eutrancell
//string HO_ATTOUTINTERENBX2_1 = dt.Rows[i][40].ToString().Trim(); //自_复制_VoLTE用户eNB间X2切换出请求次数_Eutrancell
row.CreateCell(40).SetCellValue(HO_ATTOUTINTERENBX2_1);
string HO_ATTOUTINTRAENB_1 = dt.Rows[i]["HO_ATTOUTINTRAENB_1"].ToString().Trim(); //VoLTE用户eNB内切换出请求次数(QCI=1)
//string HO_ATTOUTINTRAENB_1 = dt.Rows[i][41].ToString().Trim(); //VoLTE用户eNB内切换出请求次数(QCI=1)
row.CreateCell(41).SetCellValue(HO_ATTOUTINTRAENB_1);
string RSRP_COUNT = dt.Rows[i]["RSRP_COUNT"].ToString().Trim(); //参考信号接收功率采样点点数
//string RSRP_COUNT = dt.Rows[i][42].ToString().Trim(); //参考信号接收功率采样点点数
row.CreateCell(42).SetCellValue(RSRP_COUNT);
string RSRP_00_06 = dt.Rows[i]["RSRP_00_06"].ToString().Trim(); //自_参考信号接收功率00-06_Eutrancell
//string RSRP_00_06 = dt.Rows[i][43].ToString().Trim(); //自_参考信号接收功率00-06_Eutrancell
row.CreateCell(43).SetCellValue(RSRP_00_06);
//如果该行计算的相关字段不为空才设置公式计算结果
//通过Cell的CellFormula向单元格中写入公式
//注:直接写公式内容即可,不需要在最前加'='
if (!string.IsNullOrEmpty(RRC_SUCCCONNESTAB) && !string.IsNullOrEmpty(RRC_ATTCONNESTAB))
{
//设置公式时行号要加1
string formula = "IF(I" + (iRow + i + 1) + "=0,1,J" + (iRow + i + 1) + "/I" + (iRow + i + 1) + ")";
row.CreateCell(44).CellFormula = formula; //设置公式 RRC连接建立成功率
row.GetCell(44).CellStyle = cellStyle_per; //百分比
GetCellValue(row.GetCell(44), dt_rate, SCAN_START_TIME, "RRC连接建立成功率");
}
if (!string.IsNullOrEmpty(ERAB_NBRSUCCESTAB) && !string.IsNullOrEmpty(ERAB_NBRATTESTAB))
{
string formula = "IF(K" + (iRow + i + 1) + "=0,1,L" + (iRow + i + 1) + "/K" + (iRow + i + 1) + ")";
row.CreateCell(45).CellFormula = formula; //设置公式 E-RAB建立成功率
row.GetCell(45).CellStyle = cellStyle_per; //百分比
GetCellValue(row.GetCell(45), dt_rate, SCAN_START_TIME, "E-RAB建立成功率");
}
if (!string.IsNullOrEmpty(RRC_SUCCCONNESTAB) && !string.IsNullOrEmpty(RRC_ATTCONNESTAB) && !string.IsNullOrEmpty(ERAB_NBRSUCCESTAB) && !string.IsNullOrEmpty(ERAB_NBRATTESTAB))
{
string formula = "IF(AND(K" + (iRow + i + 1) + "=0,I" + (iRow + i + 1) + "=0),1,L" + (iRow + i + 1) + "/K" + (iRow + i + 1) + "*J" + (iRow + i + 1) + "/I" + (iRow + i + 1) + ")";
row.CreateCell(46).CellFormula = formula; //设置公式 无线接通率
row.GetCell(46).CellStyle = cellStyle_per; //百分比
GetCellValue(row.GetCell(46), dt_rate, SCAN_START_TIME, "无线接通率");
}
if (!string.IsNullOrEmpty(ERAB_HOFAIL) && !string.IsNullOrEmpty(ERAB_NBRREQRELENB) && !string.IsNullOrEmpty(NbrReqRelEnb_Normal) && !string.IsNullOrEmpty(ERAB_NBRLEFT)
&& !string.IsNullOrEmpty(ERAB_NBRSUCCESTAB) && !string.IsNullOrEmpty(ERAB_NBRHOINC))
{
string formula = "IF((S" + (iRow + i + 1) + "+L" + (iRow + i + 1) + "+T" + (iRow + i + 1) + ")=0,1,(Q" + (iRow + i + 1) + "+R" + (iRow + i + 1) + "-AA" + (iRow + i + 1) + ")/(S" + (iRow + i + 1) + "+L" + (iRow + i + 1) + "+T" + (iRow + i + 1) + "))";
row.CreateCell(47).CellFormula = formula; //无线掉线率(小区级)
row.GetCell(47).CellStyle = cellStyle_per; //百分比
GetCellValue(row.GetCell(47), dt_rate, SCAN_START_TIME, "无线掉线率(小区级)");
}
if (!string.IsNullOrEmpty(ERAB_NBRSUCCESTAB_QC1) && !string.IsNullOrEmpty(ERAB_NBRATTESTAB_QC1) && !string.IsNullOrEmpty(RRC_SUCCCONNESTAB) && !string.IsNullOrEmpty(RRC_ATTCONNESTAB))
真实项目中Npoi生成报表
最新推荐文章于 2024-03-25 10:48:16 发布