대용량 엑셀다운로드 SXSSFWorkbook
지금까지 프로젝트을 진행하면서 엑셀다운로드 기능은 꼭 한번씩은 나온거 같다.
어느 언어로 개발을 하든 엑셀다운로드 라이브러리가 대부분 제공이 된다.
지금은 POI 를 통해 엑셀다운로드 기능을 알라여보려고한다.
http://poi.apache.org/components/spreadsheet/
HSSF : EXCEL 2007 이전 버전(.xls) - 65535 라인까지 사용가능
XSSF : EXCEL 2007 이후 버전(2007포함 .xlsx - - 65535 라인 이상 사용가능
SXSSF : XSSF의 Streaming Version으로 메모리를 적게 사용 - 65535 라인 이상 사용가능
public void excelDownLoad() {
FileOutputStream fos = null;
// 워크북
SXSSFWorkbook workbook = null;
// 행
SXSSFRow row = null;
// 셀
SXSSFCell cell = null;
// 샐 스타일
CellStyle styleMoneyFormat = null;
// 셀 헤더 카운트
int index = 0;
// 행 카운트
int rowIndex = 1;
List<DataDto> dataList = null;
// 엑셀 헤더 정보 구성
String[] cellHeader = {"번호", "테스트", "날짜", "시간"};
try {
dataList = mapper.getData();
// 워크북 생성
workbook = new SXSSFWorkbook();
workbook.setCompressTempFiles(true);
// 워크시트 생성
SXSSFSheet sheet = (SXSSFSheet) workbook.createSheet("시트이름");
sheet.setRandomAccessWindowSize(100); // 메모리 행 100개로 제한, 초과 시 Disk로 flush
//셀 칼럼 크기 설정
sheet.setColumnWidth(2, 300);
// 행 생성
row = sheet.createRow(0);
// 셀 스타일 생성
styleMoneyFormat = workbook.createCellStyle();
CreationHelper ch = workbook.getCreationHelper();
styleMoneyFormat.setDataFormat(ch.createDataFormat().getFormat("#,##0"));
// 헤더 적용
for(String head : cellHeader ) {
cell = row.createCell(index++);
cell.setCellValue(head);
}
for(DataDto dataDto : dataList) {
row = sheet.createRow(rowIndex);
cell = row.createCell(0);
cell.setCellValue(rowIndex++); //번호
cell = row.createCell(1);
cell.setCellValue(dataDto.getTest()); //테스트
cell = row.createCell(2);
cell.setCellValue(dataDto.getDate()); //날짜
cell = row.createCell(3);
cell.setCellValue(dataDto.getTime()); //시간
}
String filename = "파일명.xlsx";
String orgFileName = "TEST_TEMP_FILE_01_.xlsx"; // 서버저장파일명
String fileDownLoadPath = "/home/excelTemp/"
// 파일생성
fos = new FileOutputStream(fileDownLoadPath + orgFileName);
workbook.write(fos);
paramMap.put("filePath", fileDownLoadPath);
paramMap.put("realFilNm", orgFileName);
paramMap.put("viewFileNm", filename);
} catch (Exception e) {
if(fos != null) try { fos.close(); } catch(Exception ignore) {}
} finally {
try {
workbook.close();
workbook.dispose();
if(fos != null) try { fos.close(); } catch(Exception ignore) {}
} catch (IOException e) {
e.printStackTrace();
}
}
}
'JAVA > Library' 카테고리의 다른 글
[자바] Guava 를 이용한 코드 작성 (0) | 2022.08.05 |
---|---|
jaxb IllegalAnnotationExceptions (0) | 2022.01.11 |
[Java Library] Executor Framework (0) | 2021.03.29 |
jackson (주요 어노테이션) (0) | 2021.03.21 |