티스토리 뷰
반응형
@Service
public class EmpExcelDownService implements IService {
private final Logger logger = LoggerFactory.getLogger(EmpUpdatePersonalService.class);
@Inject
private SqlSession sqlSession;
@Override
public String execute(Model model) throws Exception {
EmpDAO dao = sqlSession.getMapper(EmpDAO.class);
EmpListService listService = new EmpListService();
HttpServletRequest request = (HttpServletRequest) model.asMap().get("request");
HttpServletResponse response = (HttpServletResponse) model.asMap().get("response");
HttpSession session = request.getSession();
LoginDTO loginUserInfo = (LoginDTO) session.getAttribute("loginUserInfo");
Map<String, Object> param_map = listService.makeParamMap(request);
// String fileDir ="C:\\Users\\user\\Desktop\\";
String fileName = "down_emp_" + CommonUtil.getCurrentDate("yyyyMMddHHmmss") + ".xlsx";
//엑셀 워크북 생성
Workbook wb = new XSSFWorkbook();
//워크북 > 시트 생성
Sheet sheet = wb.createSheet("Sheet1");
//DAO에서 검색조건+list 가져오기
List<Map<String, Object>> result = dao.listExcelDown(param_map);
//key값 배열 (원하는 순서대로 map에서 value 추출 위함)
String[] key = {"emp_no", "nm", "ssn_no", "emp_status_cd_nm", "work_type_cd", "center_nm"
, "team_nm", "job_position_nm", "bank_cd", "account_no", "duty", "email"
, "cell_no", "home_tel_no", "offi_tel_no", "exten_no", "addr_basic", "memo"
, "join_ymd", "entrance_ymd", "company_nm_01", "pension_yn_01", "annual_vacation_01", "succ_entrance_01"
, "company_nm_02", "pension_yn_02", "annual_vacation_02", "succ_entrance_02"
, "retire_pension_yn", "midst_pension_ymd", "retire_ymd", "update_dt"};
//엑셀 컬럼 명(한글) 배열
String[] columnName = {"사원번호", "이름", "주민번호", "재직상태", "근무구분", "근무센터"
, "근무 팀", "직책", "은행", "계좌번호", "담당업무", "이메일"
, "휴대전화", "집전화", "직장전화", "내선번호", "주소", "비고"
, "입사일", "입소일", "고용승계 그룹사 명", "고용승계 그룹사 퇴직금 정산여부", "고용승계 그룹사 연차 정산여부", "고용승계 그룹사 입사일"
, "고용승계 타사 명", "고용승계 타사 퇴직금 정산 여부", "고용승계 타사 연차 정산여부", "고용승계 타사 입사일"
, "퇴직연금 가입여부", "퇴직금 중간정산일", "퇴직일", "최종 수정일시"};
// 엑셀 헤더 컬럼 설정
// 헤더 열 선언
Row headRow = sheet.createRow(0);
// 컬럼명 배열 길이 반복
for (int i = 0; i < columnName.length; i++) {
// 셀 생성
Cell headerCell = headRow.createCell(i);
// 헤더셀에 컬럼명 한개씩 넣어줌
headerCell.setCellValue(columnName[i]);
}
// 엑셀 바디 설정
Row bodyRow = null;
Cell bodyCell = null;
// dao에서 받은 list 사이즈 만큼 반복
for(int i =0; i<result.size(); i++){
// result의 map 한개씩 추출
Map<String, Object> map = result.get(i);
// 바디 열 설정, 이미 헤더 열 (0번째)이 있기 때문에 i+1 번째 부터 생성한다.
bodyRow = sheet.createRow(i+1);
//key값으로 map 추출 해와야 하기 때문에 key.length 만큼 반복
for(int j =0; j<key.length; j++){
//cell 생성
bodyCell = bodyRow.createCell(j);
//cell 값은 map의 key값으로 추출한다.
bodyCell.setCellValue(String.valueOf(map.get(key[j])));
}
}
// 각 브라우저에 따른 파일이름 인코딩작업
String browser = request.getHeader("User-Agent");
if (browser.indexOf("MSIE") > -1) {
fileName = URLEncoder.encode(fileName, "UTF-8").replaceAll("\\+", "%20");
} else if (browser.indexOf("Trident") > -1) { // IE11
fileName = URLEncoder.encode(fileName, "UTF-8").replaceAll("\\+", "%20");
} else if (browser.indexOf("Firefox") > -1) {
fileName = "\"" + new String(fileName.getBytes("UTF-8"), "8859_1") + "\"";
} else if (browser.indexOf("Opera") > -1) {
fileName = "\"" + new String(fileName.getBytes("UTF-8"), "8859_1") + "\"";
} else if (browser.indexOf("Chrome") > -1) {
StringBuffer sb = new StringBuffer();
for (int i = 0; i < fileName.length(); i++) {
char c = fileName.charAt(i);
if (c > '~') {
sb.append(URLEncoder.encode("" + c, "UTF-8"));
} else {
sb.append(c);
}
}
fileName = sb.toString();
} else if (browser.indexOf("Safari") > -1) {
fileName = "\"" + new String(fileName.getBytes("UTF-8"), "8859_1") + "\"";
} else {
fileName = "\"" + new String(fileName.getBytes("UTF-8"), "8859_1") + "\"";
}
// 헤더 셋팅
response.setHeader("Content-Disposition", "attachment; filename=" + fileName + ";");
// 파일생성 2
OutputStream outputStream = response.getOutputStream();
// workbook.write 하면 위의 file.createNewFile() 과 중복, 2개 생김.
wb.write(outputStream);
// 생성완료면 닫기
if (outputStream != null) {
outputStream.close();
}
return "200";
}
}
반응형
'Spring' 카테고리의 다른 글
Apache poi 4.0.x 라이브러리 Spring excel 다운로드 (응용1) (0) | 2020.07.14 |
---|---|
Apache poi 4.0.x 라이브러리 Spring excel 다운로드 (기본) (0) | 2020.07.14 |
Java에서 request에 원하는 key가 있는지 찾기 (0) | 2020.07.01 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- SpringXmlModelInspection
- poi
- 엑셀다운로드
- spring error #
- 정규식
- no getter for property named
- Regex
- POI EXCEL
- poi 엑셀
- 계좌번호정규식
- JSON
- Failed to load resource: the server responded with a status of 404 (Not Found)
- ''찾기
- IntelliJ #gradle #tomcat #spring #springmvc
- jQuery
- js
- 정규식 특수문자
- spring 엑셀
- JSON날짜
- 정규식 숫자만
- mybatis
- JSON파싱
- 공백찾기
- PageNotFound - No mapping for GET
- 정규식 한글만
- select제어
- Spring
- 인텔리제이
- 이메일 정규식
- selectbox
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
글 보관함