IT
Java Excel Library XLSTransformer 자바 엑셀 다운로드 예시 / 라이브러리 활용 함수
agnusdei1207
2022. 8. 2. 13:26
반응형
SMALL
<!-- 엑셀 -->
<dependency>
<groupId>net.sf.jxls</groupId>
<artifactId>jxls-core</artifactId>
<version>1.0.6</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>openxml4j</artifactId>
<version>1.0-beta</version>
</dependency>
1. pom.xml 엑셀 파일을 다운로드 할 수 있게 해주는 jxls 패키지를 선언한다.
2. JXLS 라이브러리는 poi 라이브러리를 기반으로 작동하기에 반드시 같이 선언해야 한다.
private InputStream readTemplate(String finalTemplate) throws FileNotFoundException {
String CONTEXT_PATH = getServletContext().getRealPath("");
String templateFilePath = CONTEXT_PATH+ File.separator + excelPath + File.separator + finalTemplate;
//////System.out.println("templateFilePath ================>"+templateFilePath);
return new FileInputStream(templateFilePath);
}
3. 엑셀 파일 경로를 설정 후 문자열 경로 리턴
@Override
@SuppressWarnings("rawtypes")
protected void renderMergedOutputModel(Map<String, Object> model, HttpServletRequest request, HttpServletResponse response) throws IOException, InvocationTargetException, SQLException, Exception, InvalidFormatException {
XLSTransformer xls = new XLSTransformer();
Configuration cf = xls.getConfiguration();
cf.setUTF16(true); //
xls.setConfiguration(cf);
InputStream is = null;
try {
is = readTemplate((String)model.get("source") );
Map<String, Object> beans = new HashMap<String, Object>();
SimpleDateFormat df = new SimpleDateFormat("yyyy.MM.dd HH:mm");
beans.put("date", df.format( new Date() ) );
beans.put("now", new Date() );
Set key = model.keySet();
for (Iterator iterator = key.iterator(); iterator.hasNext();) {
String keyName = (String) iterator.next();
beans.put( keyName, model.get(keyName) );
if( keyName.endsWith("List") ) {
List list = (List)model.get(keyName);
if( list.size() == 0 ) {
String str = "<script>alert('목록이 존재하지 않습니다.'); history.back(-1);</script>";
response.setContentType("text/html; charset=utf-8");
response.getOutputStream().write(str.getBytes());
return;
}
}
}
writeWorkbook((String)model.get("target") + "_" + sf.format(new Date() ), response, xls.transformXLS(is, beans) );
}finally {
if( is != null ) {
try {
is.close();
}catch (IOException e) {
//////System.out.println("Exception occured");
}
}
}
}
4. InputStream & OutputStream 객체를 사용하여 엑셀 다운로드를 할 수 있도록 설계
5. key 값 마지막이 "List" 로 끝날 시 사이즈를 체크하므로 반드시 리스트 타입으로 존재해야 한다.
/* 엑셀 다운로드 */
@SuppressWarnings("unchecked")
@RequestMapping(folderPath + "excelDown.do")
public ModelAndView excelDown(@ModelAttribute("searchVO") VO vo) throws Exception{
ModelAndView mav = new ModelAndView(excelView);
String tit = "제목";
String url = "/excel.xlsx";
List<VO> resultList = (List<VO>) cmmnService.selectList(vo, PROGRAM_ID+".excelDownSelectList" );
mav.addObject("target", tit);
mav.addObject("source", url);
if(resultList.size() > 0){
mav.addObject("result", resultList);
}
return mav;
}
6. URL 맵핑을 받아 엑셀을 다운을 처리하는 Controller 내 함수 사용 예시
반응형
LIST