1. 컨트롤러 만들고 bean으로 등록하기

2. view 클래스 만들기

3. view 프로퍼티 파일에 class 추가

이렇게 세 단계를 거치면 됩니다. 이 전에 작성한 글 두개에서 컨트롤러 만들고 등록하고 view 프로퍼티에 class추가해 주는 부분은 많이 살펴봤기 때문에 이번에는 생략하겠습니다.

public class MemberListExelView extends AbstractExcelView {

    @SuppressWarnings("unchecked")
    @Override
    protected void buildExcelDocument(Map model, HSSFWorkbook wb, HttpServletRequest request,
            HttpServletResponse response) throws Exception {
        HSSFSheet sheet;
        HSSFRow sheetRow;
        HSSFCell cell;

        sheet = wb.createSheet("MemberInfoList");
        sheet.setDefaultColumnWidth((short) 12);

        cell = getCell(sheet, 0, 0);
        setText(cell, "전체 멤버 조회");
        cell = getCell(sheet, 1, 0);
        setText(cell, "이름");
        cell = getCell(sheet, 1, 1);
        setText(cell, "이메일");
        cell = getCell(sheet, 1, 2);
        setText(cell, "홈페이지");

        List<MemberInfo> memberInfos = (List<MemberInfo>) model.get("members");
        MemberInfo memberInfo = null;

        for(int i = 0 ; i < memberInfos.size() ; i++ ){
            memberInfo = memberInfos.get(i);
            cell = getCell(sheet, i+2, 0);
            setText(cell, memberInfo.getName());
            cell = getCell(sheet, i+2, 1);
            setText(cell, memberInfo.getEmail());
            cell = getCell(sheet, i+2, 2);
            setText(cell, memberInfo.getHome());
        }
    }
}

getCell()로 cell을 가져 온 다음 setText(cell, String)으로 각각의 셀을 채워 넣는 형식입니다.
사용자 삽입 이미지사용자 삽입 이미지올커니.. 한글이 또 깨졌구나.

한글은 2byte 영문은 1byte 그래서 자꾸 깨지는 건데 HSSFCell API를 보면 setEncoding이라는 메소드가 있습니다. 여기에 1을 넣어주면 16bit, 0을 넣어주면 8bit로 설정된다고 합니다.

cell = getCell(sheet, 0, 0);
cell.setEncoding((short)1);
setText(cell, "전체 멤버 조회");

요런 식으로 중간 중간 setEncoding() 사용해주면 한글도 제대로 출력할 수 있습니다.

사용자 삽입 이미지