아이디어 분석:
1. 가져오기가 필요합니다. 이는 실제로 파일을 먼저 업로드한 다음 파일의 데이터를 읽는 것을 의미합니다.
2. 가져오는 Excel 열이 데이터 필드와 일치해야 하므로 템플릿이라는 사양을 제공해야 하기 때문에 가져온 템플릿이 필요합니다.
3. 먼저 가져온 정보의 임시 테이블을 만들어 가져온 파일에 정보를 저장합니다. 가져올 때마다 먼저 테이블 정보를 지운 다음 데이터를 가져와서 넣은 다음 가져온 데이터를 확인하고 마지막으로 모두 가져옵니다.
가져온 데이터와 열이 일치하지 않고 라이브러리로 직접 가져오는 것을 방지하기 위한 것입니다.
무료 동영상 튜토리얼 공유: java 온라인 동영상
코드 분석
1. 프런트엔드 js 코드:
var actionPath = contextPath + "/alumni-import"; $(function() { //加载数据 loadData(); //上传文件 uploadFile({ subfix: ['xls'], subfixTip: "请选择Excel的xls文件!", successCall: function(data, status, a) { $('[name=attachementPath]').val(data.fileName); $.post(actionPath + "!importExcel", { "f_id": data.f_id }, function(data) { if (data.success) { alertify.alert(data.message); $("#myModal-import").modal("hide"); loadData(); } else { alertify.alert(data.message); } }, "json"); } }); //导入 $("#btn-import").click(function() { var html = template("importTpl"); $("#import-body").html(html); $("#myModal-import").modal(); }); //确认导入 $("#btn-sure").click(function() { var type = $("#indentity-type").val(); alertify.confirm("确定要全部导入吗?", function(e) { if (!e) { return; } else { $.post("/alumni-import!saveReal?type=" + type, function(data) { alertify.alert("导入成功!", function() { location.href = "/alumni!hrefPage"; }); }, "json"); } }); }); });50 function loadData() { var options = { url: actionPath + "!page" }; loadPaginationData(options); }
2. 백엔드 기능 코드
프런트엔드에는 4개의 요청이 있으며, 하나는 페이지 데이터 로딩을 초기화합니다. 물론 처음에는 데이터가 없습니다. 가져오기를 확인하면 가져오기가 완료된 후 한 페이지가 정보 페이지로 돌아갑니다. 정보 페이지에는 이 가져오기로 이동하는 일괄 가져오기 페이지가 있습니다. 페이지).
첫번째 이후 마지막 이야기는 하지 않겠습니다. 두 번째와 세 번째에 대해 이야기해 보겠습니다.
(1) 두 번째
//上传文件后调用 public void importExcel() { try { //清空临时表的数据 baseAlumniImportSrv.deleteAll(); //读取文件 File file = gridFsDao.readFile(f_id); //把文件信息给临时表 int count = excelXYSrv.importExcel(file); //清空上传的文件 file.delete(); sendSuccessMsg(count, "上传成功" + count + "条数据"); } catch (IOException e) { LOGGER.error(e); sendFailMsg(null, "上传失败"); } }
@Override //使用MongoDB GridFS public File readFile(String f_id) { //拿到文件 GridFSDBFile gridFSFile = mongoGridFs.findOne(new Query(Criteria.where(F_ID).is(f_id))); if (gridFSFile == null) { return null; } String fileName = gridFSFile.getFilename(); String extension = fileName.substring(fileName.lastIndexOf("."), fileName.length()); InputStream ins = gridFSFile.getInputStream(); String tmpFile = UUID.randomUUID().toString() + extension; File file = new File(tmpFile); try { OutputStream os = new FileOutputStream(file); int bytesRead = 0; byte[] buffer = new byte[8192]; while ((bytesRead = ins.read(buffer, 0, 8192)) != -1) { os.write(buffer, 0, bytesRead); } os.close(); ins.close(); } catch (IOException e) { e.printStackTrace(); } return file; }
/** * @param excelFile * 从excel中读取数据,并存储到数据库临时表中 * @return * @throws IOException */ @Override public int importExcel(File excelFile) throws IOException { List<List<Object>> datas = ExcelImportUtil.readExcel(excelFile); int count = 0; for (int i = 1; i < datas.size(); i++) { BaseAlumniImport entity = this.convert2Entity(datas.get(i)); this.baseAlumniImportSrv.save(entity); count++; } return count; }
(3) 세 번째
public void saveReal() { int count = 0; List<BaseAlumniImport> importList = this.baseAlumniImportSrv.findAll(); for (int i = 0; i < importList.size(); i += 10) { List<BaseAlumniImport> newlist = new ArrayList<>(); if ((i + 10) < importList.size()) { newlist = importList.subList(i, i + 10); } else { newlist = importList.subList(i, importList.size()); } count += excelXYSrv.saveReal(newlist, this.type); } sendSuccessMsg(count, "导入成功" + importList.size() + "条数据"); }
@Override public int saveReal(List<BaseAlumniImport> importList, String type) { int count = 0; String alumniIdentityName = dicSrv.findById(DicAlumniIdentity.class, Integer.parseInt(type)).getValue(); for (BaseAlumniImport inst : importList) { LOGGER.info(inst.getId()); BaseAlumni v = this.importExportSrv.convert(inst); v.setId(IdKit.uuid()); v.setCreateTime(new Date()); v.setLastUpdate(new Date()); this.baseAlumnidDao.save(v); this.baseAlumniImportSrv.deleteById(inst.getId()); count++; } return count; }
@Override public int saveReal(List<BaseAlumniImport> importList, String type) { int count = 0; String alumniIdentityName = dicSrv.findById(DicAlumniIdentity.class, Integer.parseInt(type)).getValue(); for (BaseAlumniImport inst : importList) { LOGGER.info(inst.getId()); BaseAlumni v = this.importExportSrv.convert(inst); v.setId(IdKit.uuid()); v.setCreateTime(new Date()); v.setLastUpdate(new Date()); this.baseAlumnidDao.save(v); this.baseAlumniImportSrv.deleteById(inst.getId()); count++; } return count; }
결과 다이어그램 데모:
추천 관련 기사 튜토리얼: Java를 처음부터 시작하기
위 내용은 Java에서 Excel 파일을 가져오는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!