14.6. Document views (Excel)
1. 컨트롤러 만들고 bean으로 등록하기
2. view 클래스 만들기
3. view 프로퍼티 파일에 class 추가
이렇게 세 단계를 거치면 됩니다. 이 전에 작성한 글 두개에서 컨트롤러 만들고 등록하고 view 프로퍼티에 class추가해 주는 부분은 많이 살펴봤기 때문에 이번에는 생략하겠습니다.
@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() 사용해주면 한글도 제대로 출력할 수 있습니다.