유령노트
엑셀 파일 업로드 (Excel File Upload) 본문
엑셀 내용 예제1)
test1 | test2 | test3 | test4 | test5 | test6 | test7 | test8 | test9 |
값1 | 값2 | 값3 | 값4 | 값5 | 값6 | 값7 | 값8 | 값9 |
엑셀 내용 예제2)
test5 | test4 | test7 | test8 | test1 | test6 | test3 | test9 | test2 |
값5 | 값4 | 값7 | 값8 | 값1 | 값6 | 값3 | 값9 | 값2 |
엑셀 파일 헤더부분이 컬럼 명과 일치 시킬 경우 순서 상관없이 입력 가능
DummyMapper.java
1 2 | MultipartHttpServletRequest multiRequest 사용 dummyService.excelReader(multiRequest); | cs |
DummyService.java
1 | public void excelReader(MultipartHttpServletRequest mreq) throws Exception; | cs |
DummyServiceImpl.java
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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 | /************************* * 엑셀 파일 읽기 *************************/ public void excelReader(MultipartHttpServletRequest mreq) throws Exception { //쿼리로 보낼 정보 맵 HashMap<String, Object> map = new HashMap<String, Object> (); // 읽어들인 엑셀 데이터 리스트 ArrayList<HashMap<String, Object>> excelDataList = new ArrayList<HashMap<String, Object>>(); //파일 가져오기 //업로드 이름(HTML from file name) MultipartFile file = mreq.getFile("FileNameForm"); /*********** * 파일 확인 S ***********/ if(!file.isEmpty()) { try { Workbook workbook = null; workbook = WorkbookFactory.create(file.getInputStream()); int sheetCnt = workbook.getNumberOfSheets(); /********************** * 여러 시트일 경우 시트 반복 S **********************/ for(int sheetNum = 0; sheetNum < sheetCnt; sheetNum++) { // 셀별 컬럼 리스트 저장용 ArrayList<String> cellList = new ArrayList<String>(); // 현재 시트 변수 Sheet sheet = workbook.getSheetAt(sheetNum); //행 개수 int rows = sheet.getPhysicalNumberOfRows(); //헤더 셀 개수 확인 헤더는 0으로 고정 int cells = sheet.getRow(0).getPhysicalNumberOfCells(); /************* * row 별 반복 S *************/ for(int i = 0; i < rows; i++) { // 엑셀 row당 데이터 HashMap<String, Object> excelData = new HashMap<String, Object>(); //해당 row 가져오기 Row row = sheet.getRow(i); /************* * 빈 row 확인 S *************/ if(row != null) { /************** * cell 별 반복 S **************/ for(int j = 0; j < cells; j++) { //cell 변수 Cell cell = row.getCell(j); //엑셀 변수 값 String value = null; /******************** * cell null check S ********************/ if(cell != null) { /****************** * cellType 별 기능 S ******************/ switch(cell.getCellTypeEnum()) { // CellType 확인 //공식 타입일 경우 case FORMULA : value = cell.getCellFormula(); break; //숫자 타입일 경우 case NUMERIC : // 숫자가 날짜 타입인지 확인 if(DateUtil.isCellDateFormatted(cell)) { // 날짜 포맷 정의 SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); value = fmt.format(cell.getDateCellValue()); } // 일반 숫자 타입 else { Double numValue = cell.getNumericCellValue(); value = Double.toString(numValue); } break; //String 형일 경우 case STRING : value = cell.getStringCellValue(); break; //공백일 경우 case BLANK : value = ""; break; //에러 일 경우 case ERROR : //byte 형으로 반환되기에 string으로 변환 value = "" + cell.getErrorCellValue(); break; default: } /****************** * cellType 별 기능 E ******************/ } //cell이 null일 경우 else { System.out.println("Cell is null"); } /******************** * cell null check E ********************/ /******************************** * 데이터 컬럼 등록 작업 및 데이터 삽입 영역 S ********************************/ //데이터 컬럼 등록 if(i == 0) { cellList.add(value); } //데이터 컬럼, 값 삽입 else { excelData.put(cellList.get(j), value); } /******************************** * 데이터 컬럼 등록 작업 및 데이터 삽입 영역 E ********************************/ } /************** * cell 별 반복 E **************/ //데이터 확인 if(!excelData.isEmpty()) { //데이터 리스트에 삽입 excelDataList.add(excelData); } } /************* * 빈 row 확인 E *************/ } /************* * row 별 반복 E *************/ } /********************** * 여러 시트일 경우 시트 반복 E **********************/ } catch (Exception e) { System.out.println(e); } } /*********** * 파일 확인 E ***********/ map.put("excelDataList", excelDataList); dummyDAO.setExcelDataInsert(map); } | cs |
DummyMapper.java
1 | public void setExcelDataInsert(HashMap<String, Object> map) throws Exception; | cs |
SQL 문
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 32 33 | <!-- 데이터 등록 --> <insert id="setExcelDataInsert"> <![CDATA[ INSERT INTO DUMMY ( TEST1 , TEST2 , TEST3 , TEST4 , TEST5 , TEST6 , TEST7 , TEST8 , TEST9 ) VALUES ]]> <foreach collection="excelDataList" item="data" separator=","> <![CDATA[ ( #{data.test1} , #{data.test2} , #{data.test3} , #{data.test4} , #{data.test5} , #{data.test6} , #{data.test7} , #{data.test8} , #{data.test9} ) ]]> </foreach> </insert> | cs |