作者:透明 | 来源:互联网 | 2023-10-16 15:33
Java导入Excel文件如何对应属性类对应的字段?Java导出Excel文件如何实现?下面分为两段供各位测试,要是不懂或者实在不行可以评论一下,看到我会回复的jar这些你们可以自
Java导入Excel文件如何对应属性类对应的字段?Java导出Excel文件如何实现?
下面分为两段供各位测试,要是不懂或者实在不行可以评论一下,看到我会回复的
jar这些你们可以自己找,用maven也就是复制粘贴的事。
下面的链接是封装好的Excel文件导入导出的样式跟注解:
链接: https://pan.baidu.com/s/1k484vLTeTuMnTaNsOqYFqQ 提取码: wtkk
Excel文件导入导出必要的jar包:
属性类中设置:
通过画出的绿线那里的顺序将Excel文件中的数据一一对应用于导入导出
@ExcelField(title=“科目名称”, align=2, sort=25,groups={1,2})
导入:
前端通过form表单提交Excel文件数据:
class="form-search" Onsubmit="loading('正在导入,请稍等...');">
下载模板
后端导入通过前端提交的文件利用封装好的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 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("
科目编码 "+subject.getFinancialCode()+" 已存在; ");
failureNum++;
}
}catch(ConstraintViolationException ex){
failureMsg.append("
科目编码 "+subject.getFinancialCode()+" 导入失败:");
List messageList = BeanValidators.extractPropertyAndMessageAsList(ex, ": ");
for (String message : messageList){
failureMsg.append(message+"; ");
failureNum++;
}
}catch (Exception ex) {
failureMsg.append("
科目编码 "+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 page = grlLonixSubjectFinancialService.findPage(new Page(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";
}