kyh코딩 공부 블로그
POI 이용한 EXCEL다운로드 본문
poi는 엑셀만 가능하다 이걸 사용하는 이유는 엑셀을 좀 더 쉽게 컨트롤 할 수 있다.
스타일, 함수, 병합 등 자유롭게 가능하고 쓰고 읽기가 편하다.
하지만 조금 노가다가 필요하다.
나는 시트 여러개를 만들고 그 안에 값을 동일하게 주었기 때문에 반복을 사용해서 넣었지만
시트 하나만 사용할 것 같으면 시트를 하나만 생성해서 거기에 데이터를 넣어주면 된다.
//HSSFWorkbook을 생성하고
Workbook wb = new HSSFWorkbook();
//내가 넣을 데이터도 받아온다.
List<VacationVO> resultList = vacationService.listVacationExcelDown(vacationVO);
//cell에 스타일을 지정하는 부분 자신 사용할 이름으로 하나 생성해준다
CellStyle titlestyle = wb.createCellStyle();
//이거는 폰트를 지정하는 부분
Font titlefont = wb.createFont();
//이런 형식으로 스타일을 넣어준다. 폰트는 지정하고 만든 스타일에 넣어줘야한다.
//만약 다른 부분에는 다른 스타일을 적용하고 싶으면 밑에 이름과 스타일만 변경해서 하나 더 생성하면 된다.
titlefont.setFontHeightInPoints((short) 14);
titlestyle.setAlignment(CellStyle.ALIGN_CENTER);
titlestyle.setVerticalAlignment(CellStyle.VERTICAL_CENTER);
titlestyle.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex());
titlestyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
titlestyle.setWrapText(true);
titlestyle.setFont(titlefont);
//시트를 여러개 만드는 부분 시트 개수는 자신이 만들고 싶은만큼 넣어주면 된다.
int sheetCnt = 5;
//셀을 하나 만들어준다.
Cell cell = null;
//시트를 생성하는 부분 여러개 만들거니깐 배열로 만든다.
Sheet[] sheet = new HSSFSheet[sheetCnt];
for (int i= 0; i<sheetCnt; i++) {
//시트 이름을 지정하는 부분이다
String sheetName = "sheet" + (i + 1);
//시트가 생성되는 부분
sheet[i] = wb.createSheet(sheetName);
//셀을 병합하는 부분이다 숫자 순서대로 세로 0번째부터 세로 1번째까지 가로 0번째부터 가로 1번째까지
sheet[i].addMergedRegion(new CellRangeAddress(0, 1, 0, 1));
//헤더를 만드는 부분 row를 하나 생성해서 몇 번째 로우인지를 지정
Row row = sheet[i].createRow(0);
//그후 셀을 생성해서 값과 스타일을 넣어준다 그러면 헤더 끝
row.createCell(0).setCellValue("번호");
row.getCell(0).setCellStyle(titlestyle);
row.createCell(2).setCellValue("시설");
row.getCell(2).setCellStyle(titlestyle);
row.createCell(4).setCellValue("이름");
row.getCell(4).setCellStyle(titlestyle);
row.createCell(6).setCellValue("신청일");
row.getCell(6).setCellStyle(titlestyle);
row.createCell(8).setCellValue("휴가구분");
row.getCell(8).setCellStyle(titlestyle);
row.createCell(10).setCellValue("연락처");
row.getCell(10).setCellStyle(titlestyle);
row.createCell(12).setCellValue("사용기간");
row.getCell(12).setCellStyle(titlestyle);
row.createCell(14).setCellValue("총일수");
row.getCell(14).setCellStyle(titlestyle);
row.createCell(16).setCellValue("사용일수");
row.getCell(16).setCellStyle(titlestyle);
row.createCell(18).setCellValue("남은일수");
row.getCell(18).setCellStyle(titlestyle);
row.createCell(20).setCellValue("내용");
row.getCell(20).setCellStyle(titlestyle);
//이제 셀에 값을 넣어주는 부분
for (int h = 0; h < resultList.size(); h++) {
//row를 만들고 몇번째부터 값을 넣을건지를 지정 나는 헤더를 1번째까지 병합했기 때문에 2부터 시작
row = sheet[i].createRow(h + 2);
cell = row.createCell(0);
cell.setCellValue(resultList.get(h).getVaca_aply_id());
cell.setCellStyle(cententStyle);
cell = row.createCell(2);
cell.setCellValue(resultList.get(h).getVaca_aply_id());
cell.setCellStyle(cententStyle);
cell = row.createCell(4);
cell.setCellValue(resultList.get(h).getMember_name());
cell.setCellStyle(cententStyle);
}
}
//excel타입으로 넣어주고
response.setContentType("ms-vnd/excel");
//response헤더에 다운로드 형식으로 맞춰주고 파일 이름을 지정한다. 그럼 끝!
response.setHeader("Content-Disposition","attachment;filename=vacationSheetTest.xls");
wb.write(response.getOutputStream());
'코딩연습' 카테고리의 다른 글
javaMaill 이용한 메일 보내기 (0) | 2023.03.24 |
---|---|
CKEDITOR 사용 방법 (0) | 2023.03.09 |
spring Calendar로 달력만들기 2 jsp부분 (0) | 2023.03.03 |
spring Calendar함수 사용해서 달력 만들기 controller 부분 (0) | 2023.03.03 |
git hub 연결하기 (1) | 2023.03.03 |