Notice
Recent Posts
Recent Comments
Link
250x250
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- HTTP상태
- 자바
- javascript
- jsp
- 코딩테스트
- 프로그래머스
- 서버
- 개발
- 챗지피티
- SQLP
- codingtest
- SQL
- Python
- 파이썬
- 하루코딩
- java
- 개발자
- API
- ChatGPT
- HTTP
- 그리디알고리즘
- JQuery
- SQLD
- 네트워크
- 알고리즘
- 정렬알고리즘
- 탐욕알고리즘
- 알고리즘코딩테스트
- Spring
- 백준
Archives
- Today
- Total
개발자's Life
[JAVA] POI 라이브러리 이용하여 셀 서식 지정하기 본문
728x90
반응형
안녕하세요, 회사 개선사항으로 숫자 형태의 서식으로 바로 다운로드 가능하게 요청이 들어와서 처리 하였습니다.
엑셀에서 셀 입력 시 숫자 서식으로 지정하게 되면 자동으로 1000 단위에 콤마를 찍어줍니다.
제가 구현한 다운로드 기능은 따로 숫자 서식을 지정해주지 않은 부분이 있어 추가 요청사항으로 들어왔습니다.
아래 코드로 간단하게 구현 하겠습니다.
@Override
public void excelDown(HttpServletRequest req, HttpServletResponse res, BudgetDtlModel budgetDtl) {
// 엑셀 생성
XSSFWorkbook wb = new XSSFWorkbook();
// 엑셀 sheet 생성
XSSFSheet sheet = wb.createSheet("sheet 명");
Row row = null;
Cell cell = null;
// 셀 스타일 지정 -> 여기서 셀 서식 지정이 가능합니다.
// XSSFCellStyle 타입 생성
XSSFCellStyle cellStyle = wb.createCellStyle();
// 셀 포멧 타입 지정
XSSFDataFormat format = wb.createDataFormat();
// 셀 정렬(우측정렬)
cellStyle.setAlignment(CellStyle.ALIGN_RIGHT);
// 셀 중앙정렬
cellStyle.setVerticalAlignment(CellStyle.VERTICAL_CENTER);
// 셀 왼쪽 테두리
cellStyle.setBorderLeft((short)1);
// 셀 아래 테두리
cellStyle.setBorderBottom((short)1);
// 셀 위 테두리
cellStyle.setBorderTop((short)1);
// 셀 오른쪽 테두리
cellStyle.setBorderRight((short)1);
// 셀 배경 아래와 같이 사용해야 적용이 가능
cellStyle.setFillForegroundColor(HSSFColor.LIGHT_GREEN.index);
cellStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
// 셀 서식 지정
cellStyle.setDataFormat(format.getFormat("#,##0"));
// 각자 셀 길이 지정
sheet.setColumnWidth(0, 3500);
sheet.setColumnWidth(1, 3500);
sheet.setColumnWidth(2, 10000);
sheet.setColumnWidth(3, 12000);
sheet.setColumnWidth(4, 5000);
sheet.setColumnWidth(5, 6000);
sheet.setColumnWidth(6, 6000);
sheet.setColumnWidth(7, 15000);
sheet.setColumnWidth(8, 3500);
sheet.setColumnWidth(9, 3500);
sheet.setColumnWidth(10, 3500);
sheet.setColumnWidth(11, 4500);
// 헤더 명 선언 (일부러 숫자로 했습니다.)
String header[] =
{
"0",
"112",
"1112",
"2221",
"3332",
"3333",
"33345",
"2312",
"53423",
"23423",
"34123",
"25324"
};
// 행 생성
row = sheet.createRow(0);
// 행 높이 지정
row.setHeight((short) 600);
// 위 선언한 행 반복문 하여 Cell Header 셋팅
for(int i=0; i< header.length; i++) {
cell = row.createCell(i);
cell = row.getCell(i);
cell.setCellValue(header[i]);
cell.setCellStyle(cellStyle); // 위 선언한 Cell Style 적용
}
// 파일 이름 지정
String filenameTemp = "엑셀파일.xlsx";
String filename = null;
// 한글 엑셀 파일이름일 경우 깨짐 방지하기 위해 아래와 같이 인코딩 작업을 진행
try {
filename = new String(filenameTemp.getBytes(StandardCharsets.UTF_8),"8859_1");
} catch (UnsupportedEncodingException e) {
throw new RuntimeException(e);
}
// 아래는 다운로드 하는 코드이고 wb 를 닫음으로 코드가 마무리 됩니다.
try {
res.setContentType("ms-vnd/excel");
res.setHeader("Content-Disposition", "attachment;filename="+filename);
wb.write(res.getOutputStream());
wb.close();
} catch (IOException e) {
e.printStackTrace();
}
}
위 주석 참고하시면서 코드 작성하시면 어려움 없이 진행 가능합니다.
틀린부분이나 보완할 부분 있다면 댓글로 알려주세요!
감사합니다
Rowen
728x90
'Back-end > Java' 카테고리의 다른 글
[JAVA] 내가 보려고 만드는 Java 기초 문법 모음 (0) | 2025.02.27 |
---|---|
[JAVA] 좋은 객체지향 설계의 5가지 원칙 SOLID (0) | 2023.05.29 |
[JAVA] Java 기본인 Test 코드 작성(Feat.AssertJ )_김영한님 스프링 핵심 원리 - 기본편 (0) | 2023.05.28 |
[JAVA] Naver 검색 API 사용법 (2) | 2023.05.28 |
[JAVA] POI 라이브러리를 이용한 Excel Down 기능 구현 (0) | 2023.03.25 |
Comments