Java导入Excel文件返回数据对应属性类字段,Java导出Excel文件如何让数据对应指定的标题字段

Java导入Excel文件如何对应属性类对应的字段?Java导出Excel文件如何实现?
下面分为两段供各位测试,要是不懂或者实在不行可以评论一下,看到我会回复的
jar这些你们可以自己找,用maven也就是复制粘贴的事。

下面的链接是封装好的Excel文件导入导出的样式跟注解:
链接: https://pan.baidu.com/s/1k484vLTeTuMnTaNsOqYFqQ 提取码: wtkk

Excel文件导入导出必要的jar包:
Excel文件导入导出必要的jar包

属性类中设置:
通过画出的绿线那里的顺序将Excel文件中的数据一一对应用于导入导出
@ExcelField(title=“科目名称”, align=2, sort=25,groups={1,2})
导入导出对应属性

导入:

前端通过form表单提交Excel文件数据:

		<form id="importForm" action="${ctx}/rental/fcRentalRegistration/import" method="post" enctype="multipart/form-data"
			class="form-search" style="padding-left:20px;text-align:center;" onsubmit="loading('正在导入,请稍等...');"><br/>
			<input id="uploadFile" name="file" type="file" style="width:330px"/><br/><br/>  
			<input id="btnImportSubmit" class="btn btn-primary" type="submit" value="   导    入   "/>
			<a href="${ctx}/rental/fcRentalRegistration/import/template">下载模板</a>
		</form>

后端导入通过前端提交的文件利用封装好的Java类直接填充属性类中对应的属性:

 	 @RequestMapping(value = "import", method=RequestMethod.POST)
 	 public String importFile(MultipartFile file, RedirectAttributes redirectAttributes) {
		if(Global.isDemoMode()){
			addMessage(redirectAttributes, "演示模式,不允许操作!");
			return "redirect:" + adminPath + "/sys/user/list?repage";
		}
		try {
			int successNum = 0;//用于计算成功数量
			int failureNum = 0;//用于计算错误数量
			StringBuilder failureMsg = new StringBuilder();
			ImportExcel ei = new ImportExcel(file, 1, 0);//这个是ImportExcel(封装好的Java类)
			int[] group = {1};//group可以不要
			List<GrlLonixSubjectFinancial> list = ei.getDataList(GrlLonixSubjectFinancial.class,group);//直接调用这个方法就可以返回对应的字段内部是通过你导出的@ExcelField注解指定的字段进行自动赋值
			for (GrlLonixSubjectFinancial subject : list){//增强for是直接返回属性类的了
				try{
					if ("true".equals(checkCode("", subject.getFinancialCode()))){
						//BeanValidators.validateWithException(validator, subject);
						subject.setParent(findPreambleCode(null,subject.getFinancialCode()));
						grlLonixSubjectFinancialService.save(subject,"yes");//添加到数据库
						successNum++;
					}else{
						failureMsg.append("<br/>科目编码 "+subject.getFinancialCode()+" 已存在; ");
						failureNum++;
					}
				}catch(ConstraintViolationException ex){
					failureMsg.append("<br/>科目编码 "+subject.getFinancialCode()+" 导入失败:");
					List<String> messageList = BeanValidators.extractPropertyAndMessageAsList(ex, ": ");
					for (String message : messageList){
						failureMsg.append(message+"; ");
						failureNum++;
					}
				}catch (Exception ex) {
					failureMsg.append("<br/>科目编码 "+subject.getFinancialCode()+" 导入失败:"+ex.getMessage());
				}
			}
			if (failureNum>0){
				failureMsg.insert(0, ",失败 "+failureNum+" 条用户,导入信息如下:");
			}
			addMessage(redirectAttributes, "已成功导入 "+successNum+" 条科目"+failureMsg);
		} catch (Exception e) {
			addMessage(redirectAttributes, "导入科目失败!失败信息:"+e.getMessage());
		}
		return "redirect:" + adminPath + "/subject/grlLonixSubjectFinancial/list?repage";//返回路径
    }

导出:

后端导出是通过上面属性类设置在字段上的注解而对应导出的:

 @RequestMapping(value = "export", method=RequestMethod.POST)
    public String exportFile(GrlLonixSubjectFinancial grlLonixSubjectFinancial, HttpServletRequest request, HttpServletResponse response, RedirectAttributes redirectAttributes) {
		try {
            String fileName = "科目数据"+DateUtils.getDate("yyyyMMddHHmmss")+".xlsx";//文件名
            //数据库查询数据,注意:这里查询的数据是List<属性类>的数据的。我这里只是多了一层,看下面传参就知道了
            Page<GrlLonixSubjectFinancial> page = grlLonixSubjectFinancialService.findPage(new Page<GrlLonixSubjectFinancial>(request, response, -1), grlLonixSubjectFinancial); 
            int[] group = {1};//这个可以不用
    		new ExportExcel("科目数据", GrlLonixSubjectFinancial.class,group).setDataList(page.getList()).write(response, fileName).dispose();
    		return null;//这个返回可以根据自己的路径来定
		} catch (Exception e) {
			addMessage(redirectAttributes, "导出科目失败!失败信息:"+e.getMessage());
		}
		return "redirect:" + adminPath + "/subject/grlLonixSubjectFinancial/list?repage";
    }

猜你喜欢

转载自blog.csdn.net/weixin_43992507/article/details/84974391