1. 가져 오기
@RequestMapping (값 = "importExcelPartInfo.do"= RequestMethod.POST 방법은 헤더 = { "= 프로그램 / HTML 적용" }) 공공 공극 importExcelPartInfo (HttpServletRequest의 요청을 RequestPart (값 = "파일")의 MultipartFile [] uploadfiles @ HttpServletResponse를 응답) 가 발생 예외 { 지도 <문자열, 개체> 여기서 = DataConvertHelper.getRequestParam (요청); UploadResult uploadResult = 새로운 UploadResult (); ListResult <지도 <문자열, 객체 >> 결과 = 새로운 ListResult <> (); 시도 { 문자열 newpath를= DataConvertHelper.getImportPath ( "MP / iwms /" ); 문자열 realPath . = request.getSession () getServletContext () getRealPath ( "") +. newpath를; 파일 DIR = 새로운 파일 (realPath); 만약 (! {dir.isDirectory ()) dir.mkdirs (); } 문자열 화일 형식 = "XLSX | XLS |" ; 부울 FileFlag는 = 거짓 ; 에 대한 {: (uploadfiles의 MultipartFile의 MultipartFile) 경우 (fileformat.indexOf (FilenameUtils.getExtension ( . multipartFile.getOriginalFilename ())와 toLowerCase () + "|") < {) FileFlag = true로 ; BREAK ; } } IF (FileFlag) { uploadResult.setResult ( "3." ); uploadResult.setMsg는 ( "형식 오류가 다시 입력하세요"); // 파일 형식을 업로드하는 것은 않습니다 ; returnHtml (uploadResult, 응답) 반환 ; } 에 대한 {: (UploadFiles의 MultipartFile의 MultipartFile) 문자열 파일 이름 =multipartFile.getOriginalFilename (); SAVEFILE 파일 = 새로운 파일 (realPath, 파일 이름); multipartFile.transferTo (SAVEFILE); 문자열 [] COLUMNNAMES = { "PART_NO", "FORM_PART_NO", "PART_NAME_CN", "PART_NAME_EN", "PART_UNIT", "MAN_MODEL", "PART_USE", "IS_RETORACTIVITY", "IS_ENABLE를" }; 문자열 파일 이름 = realPath + Win32 시스템 +의 파일 이름; 목록 <지도 <문자열, 객체 >> 데이터 목록 = 새로운 ExcelHelper <> () readDataFromExcel (파일 이름, COLUMNNAMES, 1. ); 경우 (데이터 목록!//partInformationBIZ.importExcelPartInfo (데이터 목록, 임); uploadResult.setMsg (result.getMsg ()); uploadResult.setResult (result.getResult ()); } 경우 (uploadResult.getResult (같음) ( "0". )) { 된 JSONObject OBJ = JSONObject.fromObject (uploadResult.getMsg ()); 산부인과 객체 ( "행"= obj.get을 ); 목록 <지도 <문자열, 객체 >> = (목록 <지도 <문자열, 객체 >> 업로드 ) 산부인과를; // 문자열 orgchange = ""; 문자열 [] columnNames2 = { "PART_NO", "FORM_PART_NO", "PART_NAME_CN", "PART_NAME_EN", "PART_UNIT", "MAN_MODEL", "PART_USE", "IS_RETORACTIVITY", "IS_ENABLE", "IS_TRUE" } 문자열 [] titleNames은 = { "부품 번호", "부품 디스플레이 번호", "중국 이름", "영어", "측정 단위", "공장 모델", "사용 지침", "플라스틱 부품의 회복 여부", "사용할 수 있습니다." "오류" }; // 경로가 있는지 여부를 확인, 그것은 만들 존재하지 않습니다 // (realpath) = 새로운 새로운 파일 파일 디렉토리를; // 만약에 (! dir.isDirectory ()) // dir.mkdirs를 (); SHEETNAME 문자열 = "데이터 보 정부에 정보" , 문자열 filename2 = realpath Win32 시스템 + + + SHEETNAME ".XLSX"; 새로운 ExcelHelper <> () .writeDataToExcel (fileName2, SHEETNAME, titleNames, columnNames2 업로드); 문자열 IP = request.getLocalAddr (); INT의 포트 = request.getLocalPort (); 에서 System.out.println ( "포트 :"+ 포트); 문자열 downloadUrl = "/"+ newPath.replace (Win32 시스템, "/" ) + "/"+ SHEETNAME + ".XLSX" ; // downloadUrl = request.getScheme () + ": // "+ IP + ":" // downloadUrl = downloadUrl; uploadResult.setDownloadUrl (downloadUrl) returnHtml (uploadResult 응답); } } } 캐치 (예외 E) { logger.error ( "이상 정보"+ e.getMessage (), E) uploadResult. setResult (Globals.FAIL_CODE) uploadResult.setMsg ( "가져 오기 실패"); // 가져 오기가 실패 } returnHtml (uploadResult, 응답); 반환 ; }
(2) returnHtml () 메소드
전용 공간 returnHtml (UploadResult uploadResult, HttpServletResponse를 응답) { 시도 { 된 JSONObject 된 JSONObject = JSONObject.fromObject (uploadResult)를; 문자열 jsonStr = jsonObject.toString (); response.setContentType ( "텍스트 / HTML; 문자셋 = UTF-8" ); response.setHeader ( "에서 Pragma", "아니오 - 캐시" ); response.setHeader ( "캐시 제어", "노 캐시" ); response.setDateHeader는 ( "만료", 0 ); . response.getWriter () (jsonStr) 쓰기; response.getWriter () 플러시 ().; response.getWriter () 가까이 ().; } 캐치 (예외 전자) { e.printStackTrace (); } }
(3) 구문 분석 파일을 엑셀
/ ** * 구문 분석 엑셀 파일 * * @param의 파일 이름은 * Excel 파일 이름은 * 파라미터 : COLUMNNAMES는 *지도의 키 값으로 필드 이름 * @param 시작 인덱스 * 데이터 시트 출발 선이 지수는 0에서 시작 * @return 목록 < 지도 <문자열, 객체 >> 데이터 * @throws 예외 * / 공개 목록 <매핑 <문자열, 객체 >> readDataFromExcel (파일 이름 문자열, 문자열 []를 COLUMNNAMES가 int로 시작 인덱스)를 발생 예외 { 목록 <매핑 <문자열, 객체 >> 데이터 = 새로운 새로운ArrayList를 <지도 <문자열, 객체 >> (); FileInputStream의 FIS = 새로운 FileInputStream의 (파일 이름); 통합 된 통합 = WorkbookFactory.create (FIS); 시트 시트 = 널 ; INT sheetNum = workbook.getNumberOfSheets (); 위한 ( int로 I = 0; I <sheetNum; 내가 ++ ) { 시트 = workbook.getSheetAt (I); data.addAll (readSheet (시트 COLUMNNAMES, 시작 인덱스)); } 리턴 데이터; }
(4)
* 시트 해결, 목록 <지도 <문자열, 객체 >> 반환 입력 데이터 * * @param 시트 * 시트 개체 *의 @param COLUMNNAMES * 필드 이름, 맵의 키 값으로 * @param 시작 인덱스 * 시작 읽기 데이터 행 * @ 반환 목록 <지도 <문자열, 객체 >> 데이터 * / 개인 (시트 시트 문자열 []를 COLUMNNAMES 목록 <지도 <문자열, 객체 >> readSheet을 int로 {시작 인덱스)를 목록 <지도 <문자열, 객체 >> MAPLIST = 새로운 새로운 ArrayList를 <지도 <문자열, 객체 >> (); 행 행= 널 ; INT ROWNUM = sheet.getPhysicalNumberOfRows (); 대한 ( INT I = 시작 인덱스; 나는 <ROWNUM 내가 ++ ) { 지도 <문자열, 개체>지도 = 새 의 HashMap <문자열, 개체> (); 행 = sheet.getRow (I); 대 ( INT의 J = 0; J <columnNames.length, J ++ ) { map.put (COLUMNNAMES [J], readCellValue (row.getCell (j))); } mapList.add (MAP); } 반환 mapList을; }
(5)
/ ** * 격자 엑셀 값 판독 * * @param의 C의 엑셀 * 격자 객체 * @ 반환 데이터 객체 * / @SuppressWarnings ( "중단" ) 개별 개체 readCellValue (셀 C)을 { DecimalFormat의 DF = 새로운 새 에 DecimalFormat을 ( "0" ) IF (C == 널 ) { 창 '' ; } 다른 { 스위치 (c.getCellType ()) { 케이스 Cell.CELL_TYPE_BLANK : 반환 "" ; 사례 Cell.CELL_TYPE_BOOLEAN : 반환 c.getBooleanCellValue를 (); 사례 Cell.CELL_TYPE_ERROR : 반환 c.getErrorCellValue를 (); 사례 Cell.CELL_TYPE_FORMULA : 반환 c.getCellFormula를 (); 사례 Cell.CELL_TYPE_NUMERIC : // . 문자열 DATAFORMAT = c.getCellStyle () getDataFormatString (); 경우 (DateUtil.isCellDateFormatted (c)) { SimpleDateFormat의 자위대; //. 만 셀 또는 날짜의 정수, 형식 일치하지 않는 데이터 가져 오기가 포함 된 파일을 가져올 때 331844 관계 관리 서비스 기능, 그렇지 않으면 00:00:00 CST 2016년 1월 17일 태양입니다 ; 날짜 c.getDateCellValue D = () // 디스플레이에 직접 반환. 17 중부 표준시 00시 00분 0초 2,016 월 태양 IF (d.getHours () == 0 && d.getMinutes () == 0 && d.getSeconds () == 0 ) { SDF = 새로운 새 SimpleDateFormat의가 ( " "를 YYYY-MM-DD ) } 다른 { SDF = 새로운 새 mm : SimpleDateFormat의 (이하"MM-DD HH-YYYY의 SS " ) } 리턴 sdf.format (D) } 다른 { 창df.format (c.getNumericCellValue ()); // 数字型 } 의 경우 Cell.CELL_TYPE_STRING : 반환 ) (c.getStringCellValue을; } 반환 + : "알 수없는 세포 유형" ) (c.getCellType을; } }
* 가져 오기 주소 가져 오기 파일 * 경로 = MP / DFF / 모듈 * @ 반환 * @author 오일은 A * / 공공 정적 문자열 getImportPath (문자열 경로) { 반환 경로 + "importDffService"+ Win32 시스템 + DateTimeHelper.getCurrentTime ( " YYYYMMDD " ) +를 Win32 시스템 + StringHelper.GetGUID (); }