1. org.springframework.web.servlet.view.document.AbstractJExcelView를 상속받아서 ExcelView를 생성한다.
public class DHExcelView extends AbstractJExcelView {
/-*
* @Method Name : buildExcelDocument
* @createDate : 2011. 3. 17.
* @author : daeha
* @param arg0
* @param arg1
* @param arg2
* @param arg3
* @throws Exception
* @return : @see
* org.springframework.web.servlet.view.document.AbstractJExcelView
* #buildExcelDocument(java.util.Map, jxl.write.WritableWorkbook,
* javax.servlet.http.HttpServletRequest,
* javax.servlet.http.HttpServletResponse)
* @description : 엑셀뷰~
* @since :
*
*-
protected void buildExcelDocument(Map<String, Object> model, WritableWorkbook workbook, HttpServletRequest request, HttpServletResponse response) throws Exception {
IGenericExcelCommand excelCommand = (IGenericExcelCommand) model.get("excelCommand");
WritableCellFormat titleFormat = new WritableCellFormat(); // 스크립트 스타일
titleFormat.setBackground(Colour.GRAY_50);
String fileName = createFileName(excelCommand.getExcelTitle());
setFileNameToResponse(request, response, fileName);
List<Map<String, Object>> rows = excelCommand.getExcelContent();
Map<String, Object> headers = excelCommand.getExcelHeader();
List<String> headersOrder = excelCommand.getExcelColumnOrder();
WritableSheet sheet = workbook.createSheet(excelCommand.getExcelTitle(), 0);
int rowNumber = 0;
int cellNumber = 0;
for (String key : headers.keySet()) {
if (null != headers.get(key))
sheet.addCell(new jxl.write.Label(cellNumber, rowNumber, headers.get(headersOrder.get(cellNumber++)) + "", titleFormat));
}
rowNumber++;
for (Map<String, Object> row : rows) {
cellNumber = 0;
for (String key : row.keySet()) {
if (null != headers.get(key))
sheet.addCell(new jxl.write.Label(cellNumber, rowNumber, row.get(headersOrder.get(cellNumber++)) + ""));
}
rowNumber++;
}
}
}
2. Controller에 RequestMapping을 추가한다.
Return Type을 View로하고 위에서 만들었던 DHExcelView를 return한다.
DHExcelView가 인스턴스가 될 때 buildExcelDocument함수가 호출된다.
@RequestMapping(value = "business/get.excel")
private View getExcelList(@ModelAttribute("command") BizInfoMasterCommand command, Model model) {
ExcelCommand excelCommand = new ExcelCommand();
// 순서상관없이 put
excelCommand.setExcelHeader(new HashMap<String, Object>() {
{
put("bizSrl", "사업번호");
put("bizName", "사업명");
put("bizDetailContents", "사업내용");
put("budgetCodeValue", "예산분류");
put("totalBizStartDate", "사업시작일시");
put("totalBizEndDate", "사업종료일시");
put("supportTypeValue", "지원대상");
}
});
// 순서대로 add
excelCommand.setExcelColumnOrder(new ArrayList<String>() {
{
add("bizSrl");
add("bizName");
add("bizDetailContents");
add("budgetCodeValue");
add("totalBizStartDate");
add("totalBizEndDate");
add("supportTypeValue");
}
});
excelCommand.setExcelTitle("사업정보");
excelCommand.setExcelContent(bizInfoMasterDao2.getAllList(command));
model.addAttribute("excelCommand", excelCommand);
return new DHExcelView();