💬
목차
< 뒤로가기
인쇄

캐모마일 엑셀 모듈 가이드

개요

조회된 데이터를 엑셀파일로 만들어주거나 사용자에게 다운받을 수 있도록 제공해준다.

엑셀파일을 import가능한 형태의 데이터로 만들어주어 개발자에게 편의성을 제공한다.

Apache Poi 기반으로 작성되어 있어 apache poi 가 내장되어있고 제공해주는 기능 외에 apche poi를 직접 쓸수있다.

사용법

dependency

<dependency>
  <groupId>net.lotte.chamomile.module</groupId>
  <artifactId>chamomile-file-excel</artifactId>
  <version>3.0.0-SNAPSHOT</version>
</dependency>

엑셀 데이터 import

엑셀 import는 크게 SpreadSheet를 만드는 toSpreadSheet와 만들어진 DTO 클래스 기반으로 바로 변환해주는 toCustomClass 매서드를 제공한다.

1) toCustomClass 매서드 예시

@Data
public class TestExcelImportDTO { // 엑셀 정보를 가져올 DTO 클래스 작성

    private String userId; // 엑셀 컬럼 명과 일치해하는 필드명을 입력함

    private Long age;

    private LocalDateTime date;

    private String nullString;
}
// 파일업로드이력 DB write
List<TestExcelImportDTO> list = new ExcelImporter().toCustomClass(fileVo.getRealFilePath(), TestExcelImportDTO.class);

2) toSpreadSheet 매서드.

String path = [파일 경로]
SpreadSheet ss = ExcelImporter.toSpreadSheet(path);

SpreadSheet객체는 아래와 같은 구조로 이루어져 있다.

SpreadSheet
    - sheet목록
        - sheet명
            - 행 목록
                - 셀 목록

이 객체에서 vo를 가지는 List형태로 값을 변환하고자 할 경우 아래의 과정으로 변환할 수 있다.

List<VO클래스명> listData = (List<VO클래스명>) ExcelCommonUtil.getListFromExcel([SpreadSheet객체], "[sheet명]", VO클래스명.class);

엑셀데이터 export

export는 서버에 파일로 저장하는 방식과 사용자에게 다운로드 하는 방식을 제공한다.
제공하는 어노테이션을 붙인 DTO 클래스를 만들고 다운로드를 구현한다.

@ExcelSheet(name="Auth")
public class AuthDTO {

@ExcelColumn(name="컬럼명1", index=0)
private String column1;
@ExcelColumn(name="컬럼명2", index=1)
private String column2;
...
@GetMapping("/excel/download")
public ResponseEntity<byte[]> excelDownload(AuthQuery authQuery) {
    ExcelExporter excelExporter = new ExcelExporter("authmgmt.xlsx");
    // 위에 작성한 어노테이션을 붙인 DTO
    List<AuthDTO> results = authService.getAuthList(authQuery); 

    // 엑셀 데이터 추가
    excelExporter.addDataList(results);
    return excelExporter.toHttpResponse();
}

엑셀 api

클래스 메서드명 파라미터 반환값 설명
ExcelCommonUtil getColumnInfo Sheet sheet, int firstRowIndex List\<Column> 지정된 sheet의 요청된 행에서 column정보를 얻어온다.
getExcel String path Workbook 파일을 읽어 workbook객체를 반환한다.
getSheets Workbook workbook List\<Sheet> workbook으로 부터 sheet정보들을 읽어와 list로 반환한다.
invokeMethod String fieldName, Object obj Object 필드명으로 get메서드를 실행하여 값을 반환한다.
getListFromExcel SpreadSheet ss, String sheetName, Class\<?> clazz List\<?> 엑셀에서 추출한 SpreadSheet객체를 List형태로 반환한다.
arrangeFields Class\<?> clazz List\<Field> excel export시 annotation에 index로 정의된 순서대로 정렬 한 후 annotation이 정의된 field목록들만 반환한다.
ExcelDataHandler makeViewTitle List\<?> data, Sheet sheet, Row row, Cell cell 타이틀 행을 만든다. 설정된 최대 열 이상의 데이터는 무시된다.
makeViewRows List\<?> data, Sheet sheet, Row row, Cell cell, Locale locale int 데이터 타입별로 알맞게 각 행들을 만든다. 설정된 최대 행/최대 열 이상의 데이터는 무시된다.
getRows Sheet sheet, int firstRowIndex List\<RowElement> 엑셀 sheet에서 행/셀 데이터를 추출하여 RowElement로 변환한다.
– ExcelFile – ExcelViewer setLocale Locale locale 로케일정보를 저장한다.
setDocName (ExcelViewer에만 해당됨) String docName 파일명을 지정한다.
addData List\<?> data 조회된 데이터를 추가한다. 이 때 sheet명은 annotation에 지정된 이름으로 한다. 중복될 경우 뒤에 ‘#’이 자동으로 추가된다.
addData List\<?> data, String sheetName sheet네임을 지정하여 조회된 데이터를 추가한다. 이때 annotatino에 지정된 이름은 무시된다. 중복될 경우 뒤에 ‘#’이 자동으로 추가된다.
init 리스트를 초기화해준다.
makeExcelFile (ExcelFile에만 해당됨) String filePath 엑셀 파일을 생성하여 서버에 저장한다.
makeExcel List\<List\<?>> data, List\<SheetElement> sheetInfo, Workbook workbook 주어진 데이터로 엑셀파일을 구성하는 메서드. 재정의시 해당 메서드를 이용하여 커스터마이징한다.
ImportExcel importData String path SpreadSheet 엑셀파일의 로컬경로를 매개변수로 넘겨 SpreadSheet객체로 받는다
LargeDataExport createLargeExcel ResultSet rs, String path boolean 대용량 엑셀파일을 생성한다. 이 기능이 완료 되기 전까지 connection, Statement등을 close시키지 말아야 한다. 기존파일은 덮어 쓴다.
SpreadSheet addSheet SheetElement sheet SpreadSheet객체는 엑셀파일 한 개로 인식하면 된다. 이 메소드는 sheet를 추가한다.
get String sheetName SheetElement sheet명으로 객체내의 sheet를가져온다.
get int index SheetElement index로 객체내의 sheet를가져온다.
getSheets List\<SheetElement> 객체내의 모든 sheet를가져온다.
SheetElement SheetElement String sheetName 생성자. sheet명을 지정하여 생성한다.
addRow RowElement row sheet내에 행을 추가한다.
setRows List\<RowElement> rows sheet내에 행을 지정한다.
get int index RowElement 지정된 행을 얻어온다.
getSheetName String 현재 sheet명을 얻어온다.
setSheetName String sheetName sheet명을 지정한다.
size int 전체 행 수를 반환한다.
getRows List\<RowElement> 전체 행을 반한다.
RowElement get String columName String 컬럼 이름으로 데이터를 얻어온다.
get int index String 인덱스 번호로 데이터를 얻어온다.
addCell CellElement cell 행에 데이터를 추가한다

Excel Export시 사용되는 annotation정보

anntation명 속성 기본값 설명
ExcelSheet – 클래스에 적용한다. name sheet 기본sheet명이며 엑셀파일 생성시 addData에서 sheet명을 넘길경우 무시된다.
maxCols 500 최대 열 수 cf.) Excel 97\~2003 형식(*,xls) : 65,536행/256열 Excel 2007\~2013 (*.xlsx/xlsm) : 1,048,576행x16,384열
maxRows 2000 최대 행 수 cf.) Excel 97\~2003 형식(*,xls) : 65,536행/256열 Excel 2007\~2013 (*.xlsx/xlsm) : 1,048,576행x16,384열
foregroundColor 0x16 (HSSFColor
.HSSFColorPredefined
.GREY_25_PERCENT
.getIndex())
배경색 cf. public enum HSSFColorPredefined { BLACK (0x08, -1, 0x000000), BROWN (0x3C, -1, 0x993300), OLIVE_GREEN (0x3B, -1, 0x333300), DARK_GREEN (0x3A, -1, 0x003300), DARK_TEAL (0x38, -1, 0x003366), DARK_BLUE (0x12, 0x20, 0x000080), INDIGO (0x3E, -1, 0x333399), GREY_80_PERCENT (0x3F, -1, 0x333333), ORANGE (0x35, -1, 0xFF6600), DARK_YELLOW (0x13, -1, 0x808000), GREEN (0x11, -1, 0x008000), TEAL (0x15, 0x26, 0x008080), BLUE (0x0C, 0x27, 0x0000FF), BLUE_GREY (0x36, -1, 0x666699), GREY_50_PERCENT (0x17, -1, 0x808080), RED (0x0A, -1, 0xFF0000), LIGHT_ORANGE (0x34, -1, 0xFF9900), LIME (0x32, -1, 0x99CC00), SEA_GREEN (0x39, -1, 0x339966), AQUA (0x31, -1, 0x33CCCC), LIGHT_BLUE (0x30, -1, 0x3366FF), VIOLET (0x14, 0x24, 0x800080), GREY_40_PERCENT (0x37, -1, 0x969696), PINK (0x0E, 0x21, 0xFF00FF), GOLD (0x33, -1, 0xFFCC00), YELLOW (0x0D, 0x22, 0xFFFF00), BRIGHT_GREEN (0x0B, -1, 0x00FF00), TURQUOISE (0x0F, 0x23, 0x00FFFF), DARK_RED (0x10, 0x25, 0x800000), SKY_BLUE (0x28, -1, 0x00CCFF), PLUM (0x3D, 0x19, 0x993366), GREY_25_PERCENT (0x16, -1, 0xC0C0C0), ROSE (0x2D, -1, 0xFF99CC), LIGHT_YELLOW (0x2B, -1, 0xFFFF99), LIGHT_GREEN (0x2A, -1, 0xCCFFCC), LIGHT_TURQUOISE (0x29, 0x1B, 0xCCFFFF), PALE_BLUE (0x2C, -1, 0x99CCFF), LAVENDER (0x2E, -1, 0xCC99FF), WHITE (0x09, -1, 0xFFFFFF), CORNFLOWER_BLUE (0x18, -1, 0x9999FF), LEMON_CHIFFON (0x1A, -1, 0xFFFFCC), MAROON (0x19, -1, 0x7F0000), ORCHID (0x1C, -1, 0x660066), CORAL (0x1D, -1, 0xFF8080), ROYAL_BLUE (0x1E, -1, 0x0066CC), LIGHT_CORNFLOWER_BLUE(0x1F, -1, 0xCCCCFF), TAN (0x2F, -1, 0xFFCC99), AUTOMATIC (0x40, -1, 0x000000);
pattern FillPatternType
.SOLID_FOREGROUND
배경 패턴 cf. public enum FillPatternType { /** No background */ NO_FILL(0), /** Solidly filled */ SOLID_FOREGROUND(1), /** Small fine dots */ FINE_DOTS(2), /** Wide dots */ ALT_BARS(3), /** Sparse dots */ SPARSE_DOTS(4), /** Thick horizontal bands */ THICK_HORZ_BANDS(5), /** Thick vertical bands */ THICK_VERT_BANDS(6), /** Thick backward facing diagonals */ THICK_BACKWARD_DIAG(7), /** Thick forward facing diagonals */ THICK_FORWARD_DIAG(8), /** Large spots */ BIG_SPOTS(9), /** Brick-like layout */ BRICKS(10), /** Thin horizontal bands */ THIN_HORZ_BANDS(11), /** Thin vertical bands */ THIN_VERT_BANDS(12), /** Thin backward diagonal */ THIN_BACKWARD_DIAG(13), /** Thin forward diagonal */ THIN_FORWARD_DIAG(14), /** Squares */ SQUARES(15), /** Diamonds */ DIAMONDS(16), /** Less Dots */ LESS_DOTS(17), /** Least Dots */ LEAST_DOTS(18);
borderLeft BorderStyle.THIN 왼쪽줄 cf. public enum BorderStyle { /** * No border (default) */ NONE(0x0), /** * Thin border */ THIN(0x1), /** * Medium border */ MEDIUM(0x2), /** * dash border */ DASHED(0x3), /** * dot border */ DOTTED(0x4), /** * Thick border */ THICK(0x5), /** * double-line border */ DOUBLE(0x6), /** * hair-line border */ HAIR(0x7), /** * Medium dashed border */ MEDIUM_DASHED(0x8), /** * dash-dot border */ DASH_DOT(0x9), /** * medium dash-dot border */ MEDIUM_DASH_DOT(0xA), /** * dash-dot-dot border */ DASH_DOT_DOT(0xB), /** * medium dash-dot-dot border */ MEDIUM_DASH_DOT_DOT(0xC), /** * slanted dash-dot border */ SLANTED_DASH_DOT(0xD);
borderRight BorderStyle.THIN 오른쪽줄
borderTop BorderStyle.THIN 윗쪽줄
borderBottom BorderStyle.THIN 아래쪽줄
ExcelColumn – 출력 하고자 하는 필드에 적용한다. name 공백문자 타이틀에 표시할 컬럼명을 입력한다.
width 4000 컬럼 폭
l10n 공백 지역화(date, currency)
privacyMasking 10 개인정보 필드 마스킹
index 0 데이터 표시순서
foregroundColor 0x16 (HSSFColor
.HSSFColorPredefined
.GREY_25_PERCENT
.getIndex())
배경색
pattern FillPatternType
.SOLID_FOREGROUND
배경패턴
borderLeft BorderStyle.THIN 왼쪽줄
borderRight BorderStyle.THIN 오른쪽줄
borderTop BorderStyle.THIN 윗쪽줄
borderBottom BorderStyle.THIN 아래쪽줄
이전 로깅