HSSF : Excel 2007 하위버전(.xls) 파일 포맷을 사용할 때 사용
XSSF : Excel 2007 (.xlsx) 파일 포맷을 사용할 때 사용
SXSSF : 대용량 엑셀 파일을 출력할 때 사용
XSSFWorkbook사용법은 'XSSFWorkbook Example' 을 참고 바란다.
HSSFWorkbook과 XSSFWorkbook을 함께 사용하는 방법은 'WorkbookFactory'을 참고 바란다.
workbook 생성
SXSSFWorkbook workbook = new SXSSFWorkbook(accessRowSize);
XSSFWorkbook과의 가장 큰 차이다. ACCESS_ROW_SIZE를 정의하여 메모리를 적게 사용한다.
100으로 설정한다면 100개의 ROW씩 메모리에 올린다. 그렇기 때문에 XSSFWorkbook에서 발생하는 OutOfMemory 문제 즉 Memory leak 문제를 SXSSFWorkbook을 사용하여 해결할 수 있다.
sheet 생성
SXSSFSheet sheet = workbook.createSheet("sheet명");
row 객체
SXSSFRow row = sheet.createRow(index);
cell 객체
SXSSFCell cell = row.createCell(index);
cell 값
cell.setCellValue("value");
workbook 저장
FileOutputStream fos = new FileOutputStream(new File("excel경로"));
workbook.write(fos);
fos.close();
String rootPath = "C:/DevLog/";
//생성일자
Calendar cal = Calendar.getInstance() ;
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
SimpleDateFormat timeFormat = new SimpleDateFormat("yyyyMMddhhmmsss");
String date = dateFormat.format(cal.getTime());
String time = timeFormat.format(cal.getTime());
String directoryPath = String.format("%s%s", rootPath, date);
String excelFullPath = String.format("%s/devlog(SXSSF)_%s.xlsx", directoryPath, time);
File directory = new File(directoryPath); //디렉토리 경로
//디렉토리생성
if(!directory.exists()) {
directory.mkdir();
}
//workbook 생성
int accessRowSize = 100;
SXSSFWorkbook workbook = new SXSSFWorkbook(accessRowSize);
//sheet 생성
SXSSFSheet sheet = workbook.createSheet("DevLog");
/*데이터 생성*/
int nRowCnt = 9;
int nColCnt = 9;
for(int nRow = 0 ; nRow <= nRowCnt ; nRow++) {
//row 생성
SXSSFRow row = sheet.createRow(nRow);
for(int nCol = 0 ; nCol <= nColCnt ; nCol++) {
SXSSFCell cell = row.createCell(nCol);
cell.setCellValue(String.format("%s x %s = %s", nRow, nCol, nRow * nCol));
}
}
//workbook 저장
FileOutputStream fos = new FileOutputStream(new File(excelFullPath));
workbook.write(fos);
fos.close();
workbook을 다루기 전에는 File Object를 사용할 수 있어야 한다.
File Object에 대한 내용은 'File Object 기본 사용법' 을 참고 바란다.
XSSFWorkbook - 읽기, 쓰기
SXSSFWorobook - 쓰기
읽기도 하고 쓰기도 해야 하는 상황이라면 어떻게 해야 할까.
읽기, 쓰기 상황을 분기처리하여 사용해야 할까? 물론 그렇게 사용하여도 무방하다.
하지만 POI에서 WorkbookFactory라는 객체를 제공해 준다.
[JAVA] Excel - POI (WorkbookFactory) (5) | 2023.02.26 |
---|---|
[JAVA] Excel - POI (XSSFWorkbook Example) (6) | 2023.02.21 |
댓글 영역