마니의 공부방/Java

[java] excel 셀안의 텍스트 색상 적용

이전 프로젝트 진행중에 poi를 이용하여 기존 개발된 내용을 수정하는 작업이 있었다.

요구사항은 셀안의 텍스트를 ON/OFF에 따라서 글자색상을 다르게 해달라는 !!

예시 > ON/OFF/ON/OFF

 

확인해 보니 여러방법들이 있긴하지만, 시간이 급한터라 더 맞는 방식을 고민할 여지가 없었다.

  • HSSFFont를 시용하여 색상을 선언
  • HSSFRichTextString.applyFont() 를 이용하여 글자 지정 및 앞서 선언한 색상을 적용
  • Font 클래스에 컬러가 없는값은 IndexedColors를 사용
// 빨간색을 지정
HSSFFont fontRed = (HSSFFont) sheet.getWorkbook().createFont();
fontRed.setColor(Font.COLOR_RED);

// 파란색을 지정
HSSFFont fontBlue = (HSSFFont) sheet.getWorkbook().createFont();
fontRed.setColor(IndexedColors.BLUE.getIndex()); 
//Font클래스에 RED가 없던터라 위 방식으로 처리함

// 최종 선언된 문자(이곳은 적용할 로직에 맞추어 수정가능)
String onOffStr = "ON/OFF/ON/OFF";

HSSFRichTextString onOffStrRich = new HSSFRichTextString(onOffStr);
{
  String[] onOffArr = onOffStr.split("/"); //구분자로 문자열을 다시 분리
  int startIndex = 0;

  for(int i=0; i<onOffArr.length; i++){
    if (!"ON".equals(suppliesArr[i])) {
      onOffStrRich.applyFont(startIndex, startIndex + onOffArr[i].length(), fontRed);
    } else {
      onOffStrRich.applyFont(startIndex, startIndex + onOffArr[i].length(), fontBlue);
    }
    startIndex = startIndex + onOffArr[i].length() + 1;
  }
}

cell.setCellValue(onOffStrRich);
cell.setCellStyle(defaultStyle);