easyexcel 导入 文章目录提示:文章如有错误的地方请指出,以免误人子弟!
easyexcel 导入一、导入maven jar包二、直接上代码
提示:以下是本篇文章正文内容,下面案例可供参考
一、导入maven jar包maven 地址
com.alibaba easyexcel 3.0.5
二、直接上代码
easyexcel 官网
本文章只展示单个sheet读取。
多个sheet 读取,其实就是新加一个读sheet方法以及sheet数据类型不同,需要重写多个监听器。
- controller
@PostMapping("/importExcel")
@ResponseBody
public String excelsimport(MultipartFile multipartFile) throws IOException {
EasyExcel.read(multipartFile.getInputStream(), FieldPersonnels.class, new ExcelHeadDataListener(fieldPersonnelService)).sheet().doRead();
return "success";
}
FieldPersonnels.class 这个就是接收excel sheet数据类型所需的实体类,因为excel表头是中文的,为了图方便,实体类的字段名称也弄的中文。
import lombok.Data;
@Data
public class FieldPersonnels {
private String 状态;
private String 创建人姓名;
private String 外勤理由;
private String 录入时间;
private String 项目;
private String 外勤理由申请人;
private String 外勤申请时间;
}
ExcelHeadDataListener 这个是监听器,需要继承AnalysisEventListener 抽象类。
fieldPersonnelService 这个是入库的方法。
监听器:
import com.alibaba.excel.context.AnalysisContext; import com.alibaba.excel.event.AnalysisEventListener; import com.alibaba.fastjson.JSON; import com.yrs.wcptc.entity.person.FieldPersonnel; import com.yrs.wcptc.entity.person.FieldPersonnels; import com.yrs.wcptc.service.person.FieldPersonnelService; import lombok.extern.slf4j.Slf4j; import java.util.ArrayList; import java.util.List; @Slf4j public class ExcelHeadDataListener extends AnalysisEventListener{ private static final int BATCH_COUNT = 500; List list = new ArrayList<>(); private FieldPersonnelService fieldPersonnelService; public ExcelHeadDataListener(FieldPersonnelService fieldPersonnelService) { this.fieldPersonnelService = fieldPersonnelService; } @Override public void invoke(FieldPersonnels fieldPersonnels, AnalysisContext context) { log.info("解析到一条数据:{}", JSON.toJSONString(fieldPersonnels)); FieldPersonnel fieldPersonnel = new FieldPersonnel(); fieldPersonnel.setCreateUser(fieldPersonnels.get创建人姓名()); fieldPersonnel.setReason(fieldPersonnels.get外勤理由()); fieldPersonnel.setApplicant(fieldPersonnels.get外勤理由申请人()); fieldPersonnel.setApplicationTime(fieldPersonnels.get外勤申请时间()); fieldPersonnel.setCreateTime(fieldPersonnels.get录入时间()); if("已使用".equals(fieldPersonnels.get状态())) { fieldPersonnel.setState("0"); } else { fieldPersonnel.setState("1"); } fieldPersonnel.setProjectId(fieldPersonnels.get项目()); list.add(fieldPersonnel); // 达到BATCH_COUNT了,需要去存储一次数据库,防止数据几万条数据在内存,容易OOM if (list.size() >= BATCH_COUNT) { saveData(); // 存储完成清理 list list.clear(); } } @Override public void doAfterAllAnalysed(AnalysisContext context) { // 这里也要保存数据,确保最后遗留的数据也存储到数据库 saveData(); log.info("所有数据解析完成!"); } private void saveData() { log.info("{}条数据,开始存储数据库!", list.size()); list.remove(0); fieldPersonnelService.addExcelPersonList(list); log.info("存储数据库成功!"); } }
- service
int addExcelPersonList(List list);
- serviceImpl
@Override
public int addExcelPersonList(List list) {
return fieldPersonnelMapper.addExcelPersonList(list);
}
- mapper
int addExcelPersonList(Listlist);
- sql
insert into field_personnel( reason,project_id,applicant,application_time,create_time,create_user,state ) values (#{item.reason}, #{item.projectId}, #{item.applicant}, #{item.applicationTime}, #{item.createTime}, #{item.createUser}, #{item.state})
希望对你有所帮助!
Springboot 集成 easyexcel 实现导出



