真实项目中Npoi生成报表

这个博客介绍了如何在真实项目中利用Npoi库来生成Excel报表。首先,检查报表模板是否存在,然后创建工作簿并定义各个工作表。接着,从模板读取数据并创建数据表,包括各种比率的表。通过设置样式和数据格式,将数据填充到工作表中。最后,展示了如何处理和写入数据到单元格,并提供了导入Excel数据到数据表的静态方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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))
     

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值