728x90
반응형
엑셀 다운로드는 웬만한 CRUD 페이지에 필수적으로 들어가는 기능이다.
얼마전 엑셀 다운로드 기능을 다른 사람들의 소스를 참고하여 만들어 쓰고 있는
엑셀 다운로드 공통 기능에 대해서 정리해볼까 한다.
내가 참고한 소스도 누군가에게 참고되는 소스이기를 바라며...
<iframe id="fileDown" style='display: none' src="" width="1" height="1"></iframe>
-------------------------------------------------------------
$("#saveExcel").click(function(){
let msg = "<p>전송결과 코드 리스트를 엑셀로 저장 하시겠습니까?</p>";
msg += "<p class='c-mt2r'>전송결과_코드_리스트_" + new Date().format("yy mm dd", "") + ".xlsx</p>";
openDialog(msg, "저장", "취소", true, "excelDownload");
})
function excelDownload(){
let url = "/resultCode/excel?";
let form = $("form[name=searchForm]").serialize();
url += form;
$("#fileDown").attr("src", encodeURI(url));
$("#fileDown").submit();
}
@RequestMapping(value = "/resultCode/excel", method = RequestMethod.GET)
@ResponseBody
public String resultCodeListExcel(HttpServletRequest request, HttpServletResponse response, ResultCodeEntity resultCodeEntity) {
resultCodeService.resultCodeListExcel(request, response, resultCodeEntity);
return "";
}
public void resultCodeListExcel(HttpServletRequest request, HttpServletResponse response, ResultCodeEntity resultCodeEntity) {
List<ResultCodeEntity> list = new ArrayList<>();
resultCodeEntity.setPageSize(0);
list = resultCodeMapper.getResultCodeList(resultCodeEntity);
String[] exHeader = null;
List<Object> exBody = null;
exHeader = new String[]{"결과코드", "구분", "설명", "비고"};
if(null != list && !list.isEmpty()) {
exBody = new ArrayList<>();
for(ResultCodeEntity entity : list) {
exBody.add(entity.getResultCode());
String type = entity.getType();
if("D".equals(type))
type = "메시지 전송 결과";
else if("T".equals(type))
type = "메시지 발송 결과";
exBody.add(type);
exBody.add(entity.getComment());
exBody.add(entity.getNote());
}
}
String fileName = "전송결과_코드_리스트_"+ DateUtil.format(new Date(), "yyMMdd");
excelDownload(exHeader, exBody, fileName, list.size());
}
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.xssf.streaming.SXSSFCell;
import org.apache.poi.xssf.streaming.SXSSFRow;
import org.apache.poi.xssf.streaming.SXSSFSheet;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
......................................
public void excelDownload(String[] exHeader, List<Object> exBody, String fileName, int rowCnt){
SXSSFWorkbook workbook = new SXSSFWorkbook();
SXSSFSheet sheet = workbook.createSheet(fileName);
sheet.trackAllColumnsForAutoSizing();
SXSSFCell cell = null;
int rowNo = 0;
CellStyle headStyle = ExcelUtil.headerStyle(workbook);
CellStyle bodyStyle = ExcelUtil.bodyStyle(workbook);
bodyStyle.setWrapText(true);
SXSSFRow row = sheet.createRow(rowNo++);
int headLength = ExcelUtil.makeHeader(sheet, cell, row, headStyle, exHeader);
row = sheet.createRow(rowNo++);
if(null != exBody && !exBody.isEmpty()){
ExcelUtil.makeBody(sheet, cell, row, bodyStyle, exBody, rowCnt, headLength, rowNo);
}
//LINE :: 셀 너비 자동 조절
for(int i=0;i<headLength;i++){
sheet.autoSizeColumn(i);
}
try {
String browser = request.getHeader("User-Agent");
// 컨텐츠 타입과 파일명 지정
response.setContentType("ms-vnd/excel");
//IE와 크롬의 파일 이름 방식이 다름
if(browser.contains("MSIE") || browser.contains("Trident")){
response.setHeader("Content-Disposition", "attachment;filename="+ URLEncoder.encode(fileName,"UTF-8")+".xlsx");
}else{
response.setHeader("Content-Disposition", "attachment;filename="+new String(fileName.getBytes("UTF-8"),"8859_1")+".xlsx");
}
// 엑셀 출력
workbook.write(response.getOutputStream());
}catch (IOException e){
e.printStackTrace();
}
}
728x90
반응형
'IT > WEB' 카테고리의 다른 글
[Shell Script] 리눅스 서버에 스프링부트 war 실행 (0) | 2022.07.26 |
---|---|
[JAVA] lombok @Getter, @Setter 제외하고 따로 getter 만들기 (0) | 2022.07.20 |
[이클립스] 포맷을 이용해 소스 코드 이쁘게 관리하기 (0) | 2022.07.09 |
[JAVA] 리눅스에서 Jar 파일 실행_쉘 스크립트 (0) | 2022.07.08 |
[Java] 배열에 요소 추가하기 (0) | 2022.07.06 |