깜놀하는 해므찌로

Java Excel Library XLSTransformer 자바 엑셀 다운로드 예시 / 라이브러리 활용 함수 본문

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