ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 자바 엑셀 다중시트 업로드 poi 4.1.2
    Web Programming 2023. 2. 15. 00:40
    728x90
    반응형

    테스트한 엑셀 파일 확장자는 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
    반응형
Designed by Tistory.