-
자바 엑셀 다중시트 업로드 poi 4.1.2Web Programming 2023. 2. 15. 00:40728x90반응형
테스트한 엑셀 파일 확장자는 xlxs 이다.
poi 4.1.2 버전은 xls, xlxs 두 개 다 가능하다고 알고 있지만 테스트는 xlxs로 진행했음
먼저 pom.xml 에 디팬던시
<dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>4.1.2</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>4.1.2</version> </dependency>
JSP
<form id="uploadFrm" method="post" action="<c:url value='/excelUpload.do'/>" enctype="multipart/form-data"> <input type="file" name="upFile" id="upFile" accept=".xlsx, .xls" class="buttonFileup"/> <input type="button" onclick="uploadExcel()" class="button03" value="엑셀 파일 업로드"> </form>
enctype 는 당연히 "multipart/form-data" 쓰고 jsp 에서 버튼 클릭 시 uploadExcel() 함수 호출하여 파일 첨부 후 /excelUpload.do 호출
function uploadExcel(){ if($("#upFile").val() == ''){ alert("업로드 할 엑셀 파일 먼저 첨부 바랍니다."); }else if( $("#upFile").val() != "" ){ var ext = $('#upFile').val().split('.').pop().toLowerCase(); if($.inArray(ext, ['xls','xlsx']) == -1) { alert('등록 할수 없는 파일명입니다. 엑세 파일만 선택 바랍니다.'); $("#upFile").val(""); // input file 파일명을 다시 지워준다. return false; }else{ var frm = $("#uploadFrm"); frm.attr("action", "<c:url value='/excelUpload.do'/>"); frm.submit(); } } }
Controller
sheetNum 는 0, 1, 2 순으로 for 문을 돌려서 VO에 set 시켜서 DB에 저장
혹시나 업로드 할 엑셀 양식 파일은 하나로 정해두는 것이 좋다..
종종 파일마다 null 체크나 빈값체크가 정확히 안먹히는 경우가 있다
나같은경우는 엑셀 셀 값에 빈값이면 false 로 넘어오는 경우도 있었음..
@RequestMapping(value = "/excelInsertUpload") public ModelAndView mngSaupManageExcelUpload(MultipartHttpServletRequest request, HttpServletResponse response, HttpSession session, ExcelVO excelVO) throws IOException { DecimalFormat decFormat = new DecimalFormat("###,###"); Iterator<String> iterator = request.getFileNames(); int actResult = 0; int actResultDatail = 0; ModelAndView mav = new ModelAndView(); response.setContentType("text/html"); response.setCharacterEncoding("UTF-8"); PrintWriter out = response.getWriter(); // 관리 메인이 등록된 것이라면 // boardNo 와 년도로 체크 int actResultChk = bizBoardService.mngBizSupportAmountInsertChk(excelVO); String value = ""; MultipartFile mFile = null; while (iterator.hasNext()) { String uploadFileName = iterator.next(); mFile = request.getFile(uploadFileName); String originFileName = mFile.getOriginalFilename(); String saveFileName = originFileName; } XSSFWorkbook workbook = new XSSFWorkbook(mFile.getInputStream()); for(int sheetNum=0; sheetNum < workbook.getNumberOfSheets(); sheetNum++) { XSSFSheet sheet = workbook.getSheetAt(sheetNum); int rows = sheet.getPhysicalNumberOfRows(); int rowindex = 0; int columnindex = 0; if(sheetNum == 0) { for(rowindex = 2; rowindex < rows; rowindex++){ sheet = workbook.getSheetAt(0); XSSFRow row = sheet.getRow(rowindex); if(row != null){ int cells = row.getPhysicalNumberOfCells(); for(columnindex=0; columnindex<=cells; columnindex++) { XSSFCell cell = row.getCell(columnindex); if(cell==null) { continue; }else{ switch(cell.getCellType()) { case FORMULA: value = cell.getCellFormula(); break; case NUMERIC: value = (int) cell.getNumericCellValue()+""; break; case STRING: value = cell.getStringCellValue()+""; break; case BLANK: value = cell.getBooleanCellValue()+""; break; case ERROR: value = cell.getErrorCellValue()+""; break; default: } // 공통값 excelVO.setBoardDataNo(excelVO.getDataNo()); excelVO.setDeleteStatus("N"); if(columnindex == 0) { excelVO.setYear(value); excelVO.setExpYear(value); }else if(columnindex == 1) { excelVO.setWriterName(value); }else if(columnindex == 2) { if(value == null || "".equals(value) || "N".equals(value)) { excelVO.setSupDepartment(""); }else { excelVO.setSupDepartment(value); } }else if(columnindex == 3) { excelVO.setGubunA(value); }else if(columnindex == 4) { if(value == null || "".equals(value) || "0".equals(value)) { excelVO.setGubunAetc(""); }else { excelVO.setGubunAetc(value); } }else if(columnindex == 5) { excelVO.setGubunE(value); }else if(columnindex == 6) { excelVO.setGubunB(value); }else if(columnindex == 7) { if(value == null || "".equals(value) || "0".equals(value)) { excelVO.setGubunBetc(""); }else { excelVO.setGubunBetc(value); } }else if(columnindex == 8) { excelVO.setGubunC(value); }else if(columnindex == 9) { if(value == null || "".equals(value) || "0".equals(value)) { excelVO.setGubunCetc(""); }else { excelVO.setGubunCetc(value); / } } // else if 끝 } // cell==null 의 else } // columnindex=0; for 문의 끝 actResult = firstInsertService.firstInsertAct(excelVO); } // if(row != null) 의 끝 } // rowindex = 2; for 문의 끝 // if sheetNum == 0 끝 // 두번째 시트 }if(sheetNum == 1) { for(rowindex = 2; rowindex < rows; rowindex++){ sheet = workbook.getSheetAt(1); XSSFRow row = sheet.getRow(rowindex); if(row != null){ int cells = row.getPhysicalNumberOfCells(); for(columnindex=0; columnindex<=cells; columnindex++) { XSSFCell cell = row.getCell(columnindex); if(cell==null) { continue; }else{ switch(cell.getCellType()) { case FORMULA: value = cell.getCellFormula(); break; case NUMERIC: value = (int) cell.getNumericCellValue()+""; break; case STRING: value = cell.getStringCellValue()+""; break; case BLANK: value = cell.getBooleanCellValue()+""; break; case ERROR: value = cell.getErrorCellValue()+""; break; default: } excelVO.setDeleteStatus("N"); if(columnindex == 0) { if(value == null || "".equals(value)) { excelVO.setdetailField(""); }else { excelVO.setdetailField(value); } }else if(columnindex == 1) { if(value == null || "".equals(value)) { excelVO.setdetailFieldCategory(""); }else { excelVO.setdetailFieldCategory(value); } }else if(columnindex == 2) { if(value == null || "".equals(value) || "0".equals(value)) { excelVO.setdetailGoalNum(""); }else { excelVO.setdetailGoalNum(value); } }else if(columnindex == 3) { if(value == null || "".equals(value)) { excelVO.setdetailActResult(""); }else { excelVO.setdetailActResult(value); } } } // cell==null 의 else } // columnindex=0; for 문의 끝 actResultDatail = secondInsertService.secondExcelInsertTopAct(excelVO); } // if(row != null) 의 끝 } // rowindex = 2; for 문의 끝 }if(sheetNum == 2) { for(rowindex = 2; rowindex < rows; rowindex++){ sheet = workbook.getSheetAt(2); XSSFRow row = sheet.getRow(rowindex); if(row != null){ int cells = row.getPhysicalNumberOfCells(); for(columnindex=0; columnindex<=cells; columnindex++) { XSSFCell cell = row.getCell(columnindex); if(cell==null) { continue; }else{ switch(cell.getCellType()) { case FORMULA: value = cell.getCellFormula(); break; case NUMERIC: value = (int) cell.getNumericCellValue()+""; break; case STRING: value = cell.getStringCellValue()+""; break; case BLANK: value = cell.getBooleanCellValue()+""; break; case ERROR: value = cell.getErrorCellValue()+""; break; default: } excelVO.setDeleteStatus("N"); if(columnindex == 0) { if(value == null || "".equals(value)) { excelVO.setdetailPeriodTerm(""); }else { if( DateUtil.isCellDateFormatted(cell)) { Date date = cell.getDateCellValue(); value = new SimpleDateFormat("yyyy-MM-dd").format(date); excelVO.setdetailPeriodTerm(value); } } }else if(columnindex == 1) { if(value == null || "".equals(value) || "0000-00-00".equals(value)) { excelVO.setdetailPeriodTermTwo(""); }else { if( DateUtil.isCellDateFormatted(cell)) { Date date = cell.getDateCellValue(); value = new SimpleDateFormat("yyyy-MM-dd").format(date); excelVO.setdetailPeriodTermTwo(value); } } }else if(columnindex == 2) { if(value == null || "".equals(value)) { excelVO.setdetailContents(""); }else { excelVO.setdetailContents(value); } }else if(columnindex == 3) { if(value == null || "".equals(value)) { excelVO.setdetailNote(""); }else { excelVO.setdetailNote(value); } } } // cell==null 의 else } // columnindex=0; for 문의 끝 actResultDatail = thirdInsertService.thirdExcelInsertBomAct(excelVO); } // if(row != null) 의 끝 } // rowindex = 2; for 문의 끝 }if(sheetNum == 3) { for(rowindex = 2; rowindex < rows; rowindex++){ sheet = workbook.getSheetAt(3); XSSFRow row = sheet.getRow(rowindex); if(row != null){ int cells = row.getPhysicalNumberOfCells(); for(columnindex=0; columnindex<=cells; columnindex++) { XSSFCell cell = row.getCell(columnindex); if(cell==null) { continue; }else{ switch(cell.getCellType()) { case FORMULA: value = cell.getCellFormula(); break; case NUMERIC: value = (int) cell.getNumericCellValue()+""; break; case STRING: value = cell.getStringCellValue()+""; break; case BLANK: value = cell.getBooleanCellValue()+""; break; case ERROR: value = cell.getErrorCellValue()+""; break; default: } if(columnindex == 0) { if(value == null || "".equals(value)) { excelVO.setdetailCorpName(""); }else { excelVO.setdetailCorpName(value); } }else if(columnindex == 1) { if(value == null || "".equals(value)) { excelVO.setdetailDate(""); }else { if( DateUtil.isCellDateFormatted(cell)) { Date date = cell.getDateCellValue(); value = new SimpleDateFormat("yyyy-MM-dd").format(date); excelVO.setdetailDate(value); } } }else if(columnindex == 2) { if(value == null || "".equals(value)) { excelVO.setdetailHistory(""); }else { excelVO.setdetailHistory(value); } } } // cell==null 의 else } // columnindex=0; for 문의 끝 actResultDatail = fourthInsertService.fourthExcelInsertLastAct(excelVO); } // if(row != null) 의 끝 } // rowindex = 2; for 문의 끝 } } return null; }
728x90반응형'Web Programming' 카테고리의 다른 글
자바스크립트 아이디 값 존재 여부 확인 (0) 2023.02.15 JAVA 자바 중첩 for문 예시 (0) 2023.02.15 JAVA 자바 비밀번호 정규식 문자+특수문자+숫자 포함 9자리만 가능 (0) 2023.02.15 문자열 정규식 사이트 두곳 (0) 2023.02.15 JAVA 자바 api 링크 (0) 2023.02.15