[NPOI] ICellStyle

2019. 10. 29. 11:24C#/NPOI

C# 에서 Excel 관리 할일이 생겨서 Nuget에서 NPOI 라는 패키지를 이용했다.

처음에는 잘되고 있었는데 포퍼먼스 문제가 발생...

아 뭐가 이래 느려 했는데 처음은 아래처럼 구성했다. 

        public ICellStyle SET_STYLE(IWorkbook workbook, string fontname, double fontheight, short fontcolor, short backcolor, short DataFormat)
        {
            ICellStyle style = workbook.CreateCellStyle();
            IFont font = workbook.CreateFont();
            font.FontName = fontname;
            font.FontHeight = fontheight;
            font.Color = fontcolor;

            style.Alignment = HorizontalAlignment.Center;
            style.BorderBottom = BorderStyle.Thin;
            style.BorderDiagonal = BorderDiagonal.None;
            style.BorderLeft = BorderStyle.Thin;
            style.BorderRight = BorderStyle.Thin;
            style.BorderTop = BorderStyle.Thin;
            style.BottomBorderColor = NPOI.HSSF.Util.HSSFColor.Black.Index;
            style.BorderDiagonal = BorderDiagonal.None;
            style.BorderDiagonalLineStyle = BorderStyle.None;
            style.DataFormat = DataFormat;
            style.FillForegroundColor = backcolor;
            style.FillPattern = FillPattern.SolidForeground;

            style.SetFont(font);

            return style;
        }

한셀마다 계속 style을 생성할려니 계속 느린부분이 있어진듯해서 구조를 변경했다.

 

위 내용을 이용해서 Dictionary에 미리 데이터를 입력한다.

    Dictionary<string, ICellStyle> dic = new Dictionary<string, ICellStyle>();
    dic.Add("0_49", SET_STYLE(
                                                    workbook,
                                                    sheet.GetRow(3).Cells[0].CellStyle.GetFont(workbook).FontName,
                                                    sheet.GetRow(3).Cells[0].CellStyle.GetFont(workbook).FontHeight,
                                                    HSSFColor.Black.Index,
                                                  HSSFColor.White.Index,
                                                    49));

추후 필요시 생성한것을 로드하는 방식으로 수정하자 월등히 속도가 빨라 진다.