따라하기만 하면 되는 jxls 사용예제!!!
1. jxls 예시
1.1 pom 설정
pom.xml
<!--jxls-->
<dependency>
<groupId>net.sf.jxls</groupId>
<artifactId>jxls-core</artifactId>
<version>1.0.6</version>
</dependency>
<!--poi-->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.14</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.14</version>
</dependency>
dependency 추가해주는데
jxls 와 poi 두개 다 넣어준다
1.2 엑셀 생성 코드 작성
MakeJxlsExcel.java
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.poi.ss.usermodel.Workbook;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.fasterxml.jackson.databind.exc.InvalidFormatException;
import net.sf.jxls.exception.ParsePropertyException;
import net.sf.jxls.transformer.XLSTransformer;
public class MakeJxlsExcel {
Logger logger = LoggerFactory.getLogger(this.getClass()); //로거
public void download(HttpServletRequest request, HttpServletResponse response, Map<String, Object> model, String fileName, String templateFile)
throws ParsePropertyException, InvalidFormatException, org.apache.poi.openxml4j.exceptions.InvalidFormatException {
String tempPath = request.getSession().getServletContext().getRealPath("/WEB-INF/statis"); //temp파일이 있는 경로
try {
InputStream is = new BufferedInputStream(new FileInputStream(tempPath + "\\" + templateFile));
XLSTransformer xls = new XLSTransformer();
Workbook workbook = xls.transformXLS(is, model);
String outputFileName = new String(fileName.getBytes("KSC5601"), "8859_1"); //한글명 에러 방지
response.setHeader("Content-Disposition", "attachment; filename=\"" + outputFileName + ".xlsx\"");
OutputStream os = response.getOutputStream();
workbook.write(os);
logger.info(">>>>>>>>> Make and Download Excel File Success"); //로그 찍기
logger.info(" fileName : " + fileName + ".xlsx");
} catch (IOException e) {
e.printStackTrace();
}
}
}
템플릿에 받은 map 데이터를 넣어 가공하고 내려받게 해주는 부분이다
이렇게 모듈화 해두면 다른 프로젝트에서 쓸 때도 간단해서 좋으니 최대한 모듈화!!
1.3 엑셀 템플릿 제작
sample.xlsx
그리고 엑셀 템플릿을 만들어 둔다
1.4 컨트롤러에서 사용하는 법
Controller.java
@RequestMapping("downloadExcel.do")
public void downloadExcel(HttpServletRequest request,
HttpServletResponse response
@RequestParam(value = "year") String year) throws Exception{
//사용할 변수 정의
Map<String, Object> inputMap = new HashMap<String, Object>();
Map<String, Object> outputMap = new HashMap<String, Object>();
inputMap.put("YEAR", year);
List<Map<String, Object>> A_List = new ArrayList<Map<String, Object>>();
List<Map<String, Object>> B_List = new ArrayList<Map<String, Object>>();
String title1 = year + "년 데이터(A type)";
String title2 = year + "년 데이터(B type)";
//데이터 추출
A_List = service.getAList(inputMap); //연도(year)로 A_List를 추출해옴
B_List = service.getBList(inputMap); //연도(year)로 B_List를 추출해옴
//엑셀 jxls 양식에 맞게 outputMap 가공
outputMap.put("title1", title1);
outputMap.put("title2", title2);
outputMap.put("A_List", A_List); //엑셀 템플릿에서 forEach 돌 리스트
outputMap.put("B_List", B_List); //엑셀 템플릿에서 forEach 돌 리스트
//파일명 가공
String newFileName = year +"_" + DateTimeUtil.formatTime4Rtm(new Date().getTime());
//위의 엑셀 가공 모듈 불러와서 실행
MakeJxlsExcel mje = new MakeJxlsExcel();
mje.download(request, response, outputMap, newFileName, "sample.xlsx");
//mje.download(request, response, 데이터 담긴 map, 다운로드 파일명, 템플릿 파일명);
}
컨트롤러에서는 다음과 같이 데이터를 map에 넣어 전달해주기만 하면 된다
주석에 설명과 예시를 적어놨으니 쓰기 쉬울것!!
1.5 기타
화면단에서는 버튼 누르면 이렇게 바로 컨트롤러 타도록!
$("#btn").click(function(){
location.href="/downloadExcel.do";
}
이렇게만 따라하면
간단하고 쉽게 다운로드 가능하다
끝!
728x90
반응형