-
초보자도 만들수 있는 자바로 엑셀 셀 병합 하기(셀 합치기)Study/Spring 2024. 2. 27. 00:43반응형
저번 시리즈에 이어 이번에는 셀을 병합하는 방법에 대해서 알아볼려고 함.
혹시 저번 시리즈인 '엑셀 기능 만들기' 와 '엑셀 스타일 적용하기' 기능에 대해 알고 싶다면 아래 링크 참고 바람!
https://cbn1218.tistory.com/51
https://cbn1218.tistory.com/42
일단은 궁금하니 결과 부터 보고 가기로!
1.결과
노란색펜으로 칠한 부분이 셀을 병합한 부분!
위와 같이 셀 병합은 어떻게 진행 하는 걸까?!
아래 설명 ㄱㄱ
2.설명
우선은 '엑셀 스타일 적용하기' 컨텐츠를 바탕으로 셀 병합 기능을 추가 했으니,
혹시 지금 글 부터 봐서 헷갈린다 하시는 분들은 바로 위에 첨부한 링크 참고 하심 편하실듯 함.
그럼 본격적으로 설명 ㄱㄱ
(1)Controller 부분
우선 전체 코드를 보자면 아래와 같음.
전체코드를 보고 이해 하실분은 아래 코드를 보심되고 추가 설명이 필요하다 하심 아래보심 될듯함.
추가설명을 적어놓았음.
@GetMapping("/signIn.do") public String signInPage() { System.out.println("signIn.do 페이지 들어옴"); return "signIn"; } @PostMapping("/excel.do") public void excel(HttpServletResponse response)throws Exception{ System.out.println("excel.do들어옴"); Workbook workbook = new SXSSFWorkbook(); Sheet sheet = workbook.createSheet(); //폰트 설정 Font titleFont = workbook.createFont(); titleFont.setFontName("맑은 고딕"); // 폰트 이름 titleFont.setFontHeightInPoints((short) 12); // 폰트 크기 titleFont.setBold(true);//폰트 두께 //셀 병합 타이틀 CellStyle mergedTitle = workbook.createCellStyle(); mergedTitle.setAlignment(HorizontalAlignment.CENTER); //텍스트 정렬 mergedTitle.setFont(titleFont); //위에 설정한 폰트 스타일 적용 //타이틀 스타일 설정 CellStyle titleCellStyle = workbook.createCellStyle(); titleCellStyle.setAlignment(HorizontalAlignment.CENTER); //텍스트 정렬 titleCellStyle.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex()); //셀 배경색 설정 titleCellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);// 셀의 채우기 패턴 titleCellStyle.setFont(titleFont); //위에 설정한 폰트 스타일 적용 //셀 컨텐츠 설정 CellStyle contentCellStyle = workbook.createCellStyle(); contentCellStyle.setAlignment(HorizontalAlignment.CENTER); //텍스트 수평 정렬 contentCellStyle.setVerticalAlignment(VerticalAlignment.CENTER); //텍스트 수직 정렬 contentCellStyle.setBorderBottom(BorderStyle.THIN); //아래선 설정 contentCellStyle.setBorderLeft(BorderStyle.THIN); //왼쪽선 설정 contentCellStyle.setBorderRight(BorderStyle.THIN); //오른쪽선 설정 contentCellStyle.setBorderTop(BorderStyle.THIN); //위에선 설정 List<userVO> excelList =service.getList2(); Row titleRow = sheet.createRow(0); Cell titleCell = titleRow.createCell(0); titleCell.setCellStyle(mergedTitle); titleCell.setCellValue("엑셀 리스트"); CellRangeAddress mergedTitleCell = new CellRangeAddress(0,0,0,4); sheet.addMergedRegion(mergedTitleCell); Row headerRow = sheet.createRow(1); Cell headerCell0 = headerRow.createCell(0); headerCell0.setCellStyle(titleCellStyle); headerCell0.setCellValue("상담상태"); Cell headerCell1 = headerRow.createCell(1); headerCell1.setCellStyle(titleCellStyle); headerCell1.setCellValue("이름"); Cell headerCell2 = headerRow.createCell(2); headerCell2.setCellStyle(titleCellStyle); headerCell2.setCellValue("시간"); Cell headerCell3 = headerRow.createCell(3); headerCell3.setCellStyle(titleCellStyle); headerCell3.setCellValue("상품내용"); Cell headerCell4 = headerRow.createCell(4); headerCell4.setCellStyle(titleCellStyle); headerCell4.setCellValue("비고"); int rowIndex = 2; for(userVO list: excelList){ Row bodyRow = sheet.createRow(rowIndex++); Cell bodyCell0 = bodyRow.createCell(0); bodyCell0.setCellStyle(contentCellStyle); bodyCell0.setCellValue(list.getSTATUS()); Cell bodyCell1 = bodyRow.createCell(1); bodyCell1.setCellStyle(contentCellStyle); bodyCell1.setCellValue(list.getNAME()); Cell bodyCell2 = bodyRow.createCell(2); bodyCell2.setCellStyle(contentCellStyle); bodyCell2.setCellValue(list.getTIME()); Cell bodyCell3 = bodyRow.createCell(3); bodyCell3.setCellStyle(contentCellStyle); bodyCell3.setCellValue(list.getCONTENT()); Cell bodyCell4 = bodyRow.createCell(4); bodyCell4.setCellStyle(contentCellStyle); bodyCell4.setCellValue("내용 없음"); if(rowIndex == excelList.size()+2) { CellRangeAddress mergedCell = new CellRangeAddress(2,5,4,4); sheet.addMergedRegion(mergedCell); } } response.setContentType("application/vnd.ms-excel"); response.setHeader("Content-Disposition", "attachment;filename=test.xlsx"); workbook.write(response.getOutputStream()); workbook.close(); } }
셀 가로 병합과 세로 병합 모두 아래 코드 형식을 상황에 맞게 수정해서 쓰면 되는데,
가로병합과 세로병합이 사용하는 방법이 아주 약간 다르나
먼저 쉬운 가로 병합먼저 설명하자면
CellRangeAddress mergedTitleCell = new CellRangeAddress(0,0,0,4); sheet.addMergedRegion(mergedTitleCell);
new CellRangeAddress ( 행 merged 시작 index , 행 merged 끝 index ,열 merged 시작 index , 열 merged 끝 index )
새로운 객체를 만드는데, 예를 들어 new CellRangeAddress(0,0,0,4) 는 병합하는 행은 0 부터 0 까지 시작과 끝이 같아 병합되는 행이 없고,병합하는 열은 0부터 4까지의 범위로 셀의 갯수로는 5개의 셀이 가로로 병합이 됨.
sheet.addMergedRegion() 메서드안에 merged한 변수명인 'mergedTitleCell' 넣어 셀병합을 적용 함.
CellRangeAddress mergedCell = new CellRangeAddress(2,5,4,4); sheet.addMergedRegion(mergedCell);
반대로 세로로 병합을 할때 병합하는 행은 2에서 5까지 행을 병합을 하고 열은 4에서 4까지
즉, 시작과 끝이 같음.
실질적으로 병합되는 열은 없기 때문에 2에서 5까지 행만 셀 병합이 진행 됨.
그래서 아래와 같은 결과가 나옴.
반응형'Study > Spring' 카테고리의 다른 글
초보자도 만들 수 있는 자바로 엑셀 스타일 적용하기 (엑셀 테두리 넣기&엑셀 배경색 넣기) (0) 2024.02.23 초보자도 만들 수 있는 자바로 엑셀 기능 만들기 (0) 2023.04.08 초보자도 간단하게 웹페이지에 이미지 보여주기(로컬 폴더에 있는 이미지 JSP에서 보여주기) (1) 2023.03.19 초보자를 위한 Ajax통신으로 메뉴불러오기_(1) (0) 2023.03.07 초보자를 위한 AJAX통신으로 회원가입기능 간단히 만들기 (0) 2023.01.03