엑셀 POI 파일명 변경불가
- 작성자 :
- 김*실
- 작성일 :
- 2015-03-16 11:39:45
- 조회수 :
- 2,291
- 구분 :
- 실행환경
- 진행상태 :
- 완료
Q
안녕하세요.
AbstractExcelView는 buildExcelDocument 구현시 파일명 변경이 가능한데
AbstractPOIExcelView는 renderMergedOutputModel 에서 buildExcelDocument 실행 후 파일명을 다시 변경하게 되있어서
파일명을 지정해도 적용이 안되네요.
이 부분 처리하는 방법이 있는지 문의드립니다.
@Override
protected final void renderMergedOutputModel(Map<String, Object> model, HttpServletRequest request, HttpServletResponse response) throws Exception {
XSSFWorkbook workbook = new XSSFWorkbook();
LOGGER.debug("Created Excel Workbook from scratch");
/*if (workbook instanceof XSSFWorkbook) {
setContentType(CONTENT_TYPE_XLSX);
} else {
setContentType(CONTENT_TYPE_XLS);
}*/
setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
//*****아래 메소드를 오버라이드 하게되있지만
buildExcelDocument(model, workbook, request, response);
// Set the content type.
response.setContentType(getContentType());
//*****여기서 파일명을 다시 설정해버려서 소용이 없네요
response.setHeader("Content-Disposition", "attachment; filename=\"" + getClass().getSimpleName() + ".xlsx\"");
// Flush byte array to servlet output stream.
ServletOutputStream out = response.getOutputStream();
out.flush();
workbook.write(out);
out.flush();
// Don't close the stream - we didn't open it, so let the container
// handle it.
// http://stackoverflow.com/questions/1829784/should-i-close-the-servlet-outputstream
}
감사합니다. 좋은 하루 되세요.
AbstractExcelView는 buildExcelDocument 구현시 파일명 변경이 가능한데
AbstractPOIExcelView는 renderMergedOutputModel 에서 buildExcelDocument 실행 후 파일명을 다시 변경하게 되있어서
파일명을 지정해도 적용이 안되네요.
이 부분 처리하는 방법이 있는지 문의드립니다.
@Override
protected final void renderMergedOutputModel(Map<String, Object> model, HttpServletRequest request, HttpServletResponse response) throws Exception {
XSSFWorkbook workbook = new XSSFWorkbook();
LOGGER.debug("Created Excel Workbook from scratch");
/*if (workbook instanceof XSSFWorkbook) {
setContentType(CONTENT_TYPE_XLSX);
} else {
setContentType(CONTENT_TYPE_XLS);
}*/
setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
//*****아래 메소드를 오버라이드 하게되있지만
buildExcelDocument(model, workbook, request, response);
// Set the content type.
response.setContentType(getContentType());
//*****여기서 파일명을 다시 설정해버려서 소용이 없네요
response.setHeader("Content-Disposition", "attachment; filename=\"" + getClass().getSimpleName() + ".xlsx\"");
// Flush byte array to servlet output stream.
ServletOutputStream out = response.getOutputStream();
out.flush();
workbook.write(out);
out.flush();
// Don't close the stream - we didn't open it, so let the container
// handle it.
// http://stackoverflow.com/questions/1829784/should-i-close-the-servlet-outputstream
}
감사합니다. 좋은 하루 되세요.
A
안녕하세요 . 김재실님.
setContentType 관련 내역을 삭제 하시고
setHeader 설정시 문제가 있는거 같습니다. 아래 내역 참고 하시면 될꺼 같습니다.
response.setHeader("Content-disposition","attachment;filename=test.xlsx");
response.setHeader("Content-Type", "application/vnd.ms-excel; charset=MS949");
response.setHeader("Content-Description", "JSP Generated Data");
response.setHeader("Content-Transfer-Encoding", "binary;");
response.setHeader("Pragma", "no-cache;");
response.setHeader("Expires", "-1;");
setContentType 관련 내역을 삭제 하시고
setHeader 설정시 문제가 있는거 같습니다. 아래 내역 참고 하시면 될꺼 같습니다.
response.setHeader("Content-disposition","attachment;filename=test.xlsx");
response.setHeader("Content-Type", "application/vnd.ms-excel; charset=MS949");
response.setHeader("Content-Description", "JSP Generated Data");
response.setHeader("Content-Transfer-Encoding", "binary;");
response.setHeader("Pragma", "no-cache;");
response.setHeader("Expires", "-1;");