본문 바로가기
블로그 이미지

방문해 주셔서 감사합니다! 항상 행복하세요!

  
   - 문의사항은 메일 또는 댓글로 언제든 연락주세요.
   - "해줘","답 내놔" 같은 질문은 답변드리지 않습니다.
   - 메일주소 : lts06069@naver.com


Java(자바)

Java poi 스타일 적용 및 적용이 되지 않는 경우

야근없는 행복한 삶을 위해 ~
by 마샤와 곰 2019. 5. 28.

 

 

사용자의 요청에 의해서 엑셀파일을 만들었어야 하는데, 병합, 선 그리기 색깔 등 요구사항이 복잡하고 많았었다.

그러다 보니 여러 삽질을 통해서 다양한 오류와 방법을 습득 하였던 것 같다.

일단, 셀에서의 병합은 merge이다.

HSSFWorkbook workbook = new HSSFWorkbook();
HSSFSheet sheet = workbook.createSheet();
CellRangeAddress address = new CellRangeAddress(시작줄,종료줄,시작행,종료행);
sheet.addMergedRegion(address);

 

병합은 만들어진 sheet객체를 대상으로 실시되는데, 엑셀을 output하기 전 까지 코드 어디에 위치하던지 간에 잘 작동한다. 처음 이해가 안갔던 부분이 CellRangeAddress 부분의 생성자였는데, 몇가지 경우를 연습하고 나니 어렵지는 않았다. 아래표를 소스코드로 만들어보자.

HSSFWorkbook workbook = new HSSFWorkbook();
HSSFSheet sheet = workbook.createSheet();
CellRangeAddress address = new CellRangeAddress(1,2,0,0); //요기
sheet.addMergedRegion(address);

 

한개 더 해보자.

HSSFWorkbook workbook = new HSSFWorkbook();
HSSFSheet sheet = workbook.createSheet();
CellRangeAddress address = new CellRangeAddress(1,2,0,0); //첫번째 병합부분
sheet.addMergedRegion(address);
address = new CellRangeAddress(2,2,1,1); //두번째 병합부분
sheet.addMergedRegion(address);

 

병합할 내용이 있다면 순차적으로 계속 써 주어야 한다.

스타일 적용은 sheet 객체에서 HSSRow 객체를 만든다음 만들어진 HSSRow 객체에서 Cell객체를 만들어 각각 적용해야 한다.

그러한 스타일 객체는 workbook 객체를 통해 만들어진다. 아래코드를 보자.

HSSFWorkbook workbook = new HSSFWorkbook();
HSSFSheet sheet = workbook.createSheet();
HSSFCellStyle style = workbook.createCellStyle();  //요녀석이 스타일 객체
HSSFRow row = sheet.createRow(0); //열 생성
Cell cell = row.createCell(0);  //셀 생성
cell.setCellStyle(style);  //3번째 줄에서 만든 스타일 적용

 

스타일은 다양한 종류를 지원한다. 몇가지로 적어보면

HSSFWorkbook workbook = new HSSFWorkbook();
HSSFSheet sheet = workbook.createSheet();
HSSFCellStyle style = workbook.createCellStyle();

style.setBorderBottom(HSSFCellStyle.BORDER_THIN);  //테두리 종류들
style.setBorderTop(HSSFCellStyle.BORDER_THIN);
style.setBorderRight(HSSFCellStyle.BORDER_THIN);
style.setBorderLeft(HSSFCellStyle.BORDER_THIN);	
		
style.setVerticalAlignment(CellStyle.VERTICAL_CENTER); //중앙 정렬(위~아래)
style.setAlignment(CellStyle.ALIGN_CENTER);  //중앙정렬(좌~우)		

style.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex());  //채우기 선택
style.setFillPattern(CellStyle.SOLID_FOREGROUND);  //채우기 적용(이거안하면 안채운다)

HSSFRow row = sheet.createRow(0); //열 생성
Cell cell = row.createCell(0);  //셀 생성
cell.setCellStyle(style);  //3번째 줄에서 만든 스타일 적용

 

스타일은 각각의 셀에 적용해야 되는 점이 조금 귀찮다.

그리고 만약 다른 스타일을 적용하고 싶으면 workbook에서 새로 스타일을 만들어 주어야 한다. 그런데 새로 만드는횟수가 대략적으로 20~30회(?)정도 넘어가면 스타일이 적용되지 않는 버그도 있는 것 같다.

대충 아래와 같은 경우이다.

HSSFWorkbook workbook = new HSSFWorkbook();
HSSFSheet sheet = workbook.createSheet();
HSSFCellStyle style = workbook.createCellStyle();
style.setVerticalAlignment(CellStyle.VERTICAL_CENTER); //중앙 정렬(위~아래)
style.setAlignment(CellStyle.ALIGN_CENTER);  //중앙정렬(좌~우)		

HSSFRow row = sheet.createRow(0); //열 생성
Cell cell = row.createCell(0);  //0번째 셀 생성
cell.setCellStyle(style);  //4~5번째 줄에서 만든 스타일 적용

style = workbook.createCellStyle(); //셀 스타일 초기화
cell = row.createCell(1);  //1번째 셀 생성
cell.setCellStyle(style);  //기본 스타일 적용

 

위 코드와 관련된 패키지 명칭이다.

import org.apache.poi.hssf.usermodel.HSSFCellStyle;  //만들 스타일
import org.apache.poi.hssf.usermodel.HSSFRow; //열
import org.apache.poi.hssf.usermodel.HSSFSheet;  //시트
import org.apache.poi.hssf.usermodel.HSSFWorkbook;  //워크북
import org.apache.poi.ss.usermodel.Cell;  //셀
import org.apache.poi.ss.usermodel.CellStyle;  //셀 스타일
import org.apache.poi.ss.usermodel.IndexedColors;  //스타일에 적용된 칼라
import org.apache.poi.ss.util.CellRangeAddress;  //병합

 

 

반응형
* 위 에니메이션은 Html의 캔버스(canvas)기반으로 동작하는 기능 입니다. Html 캔버스 튜토리얼 도 한번 살펴보세요~ :)
* 직접 만든 Html 캔버스 애니메이션 도 한번 살펴보세요~ :)

댓글