사용자의 요청에 의해서 엑셀파일을 만들었어야 하는데, 병합, 선 그리기 색깔 등 요구사항이 복잡하고 많았었다.
그러다 보니 여러 삽질을 통해서 다양한 오류와 방법을 습득 하였던 것 같다.
일단, 셀에서의 병합은 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; //병합
반응형
'Java(자바)' 카테고리의 다른 글
Java List unmodifiableList (final 같은 배열) (0) | 2019.06.21 |
---|---|
Java synchronized, ReentrantLock, semaphore (0) | 2019.06.13 |
Java 1.8 Optional 그리고 stream (0) | 2019.05.20 |
Java 배열로부터 엑셀, csv, 및 일반 text 파일 만들기 (0) | 2019.05.17 |
파일종류, Dos파일 / Unix파일 (0) | 2019.04.25 |
* 위 에니메이션은 Html의 캔버스(canvas)기반으로 동작하는 기능 입니다. Html 캔버스 튜토리얼 도 한번 살펴보세요~ :)
* 직접 만든 Html 캔버스 애니메이션 도 한번 살펴보세요~ :)
댓글