本人操作的项目SpringBoot项目,直接代码展示!!
以下代码可以直接复制,然后到自己的项目中进行微调。
别问!!!问我就是雷锋~
properties标签下引入本人使用的是2.1.6版本鸭~
2.1.6
dependencies标签下引入
com.alibaba easyexcel ${easyexcel.version}
到这里,准备工作就做好了,下面进行正式代码环节#
**注意事项:
1,Controller层,文件地址必须和自己电脑的保持一致,最好去文件夹上面复制路径。
2,每个导入都有自己写导入逻辑的文件,结构都是一样的,具体内容则需修改。
3,接口里面有DTO,每个字段需要和excel里面的列对应,同时不需要序号列可以直接删除,第一行必须是列表述,否则会丢失一行数据。
Controller层代码:
public JsonResultimportGroupSchoolUser() throws Exception{ String fileName = "C:\\Users\\15579\\Desktop\\测试Excel导入.xlsx"; EasyExcel.read(fileName, SupportConditionDTO.class, new SupportConditionListener(effectDao, expertGroupDao,expertGroupSchoolDao,expertSchoolDao,expertSchoolService, 1)).sheet(0).doRead(); return JsonResult.ok(); }
Controller层代码释义:
1,fileName 是文件所在位置,改成自己的。
2,用到什么dao需要在Controller层传过去,否则到下一步是空值,会导致空指针。
3,那个1是第几个sheet页
4,SupportConditionDTO这个DTO自己起名,然后让里面的字段和文件中对应,上面已经描述了。
SupportConditionListener文件里面的内容:
public class SupportConditionListener extends AnalysisEventListener{ private static final Logger LOGGER = LoggerFactory.getLogger(SupportConditionListener.class); /** * 每隔5条存储数据库,实际使用中可以3000条,然后清理list ,方便内存回收 */ private static final int BATCH_COUNT = 1000; List schoolEntityList = new ArrayList<>(); List expertSchoolEntityList = new ArrayList<>(); List expertGroupEntityList = new ArrayList<>(); List expertGroupSchoolEntityList = new ArrayList<>(); List expertSchoolInfoScoreSchoolInfoDTOList = new ArrayList<>(); List schoolIndicatorDetailEntities = new ArrayList<>(); /** * 假设这个是一个DAO,当然有业务逻辑这个也可以是一个service。当然如果不用存储这个对象没用。 */ @Resource private ExpertGroupDao expertGroupDao; @Resource private ExpertGroupSchoolDao expertGroupSchoolDao; @Resource private ExpertSchoolDao expertSchoolDao; @Resource private EffectDao effectDao; @Resource private ExpertSchoolService expertSchoolService; private Integer sheet; public SupportConditionListener() { // 这里是demo,所以随便new一个。实际使用如果到了spring,请使用下面的有参构造函数 } /** * 如果使用了spring,请使用这个构造方法。每次创建Listener的时候需要把spring管理的类传进来 * * @param */ public SupportConditionListener(EffectDao effectDao, ExpertGroupDao expertGroupDao, ExpertGroupSchoolDao expertGroupSchoolDao, ExpertSchoolDao expertSchoolDao, ExpertSchoolService expertSchoolService, Integer sheet, List schoolEntities) { this.effectDao = effectDao; this.expertGroupDao = expertGroupDao; this.expertGroupSchoolDao = expertGroupSchoolDao; this.expertSchoolDao = expertSchoolDao; this.expertSchoolService = expertSchoolService; this.schoolEntityList = schoolEntities; this.sheet = sheet; } /** * 这个每一条数据解析都会来调用 * * @param data one row value. Is is same as {@link AnalysisContext#readRowHolder()} * @param context AnalysisContext */ @Override public void invoke(SupportConditionDTO data, AnalysisContext context) { LOGGER.info("解析到一条数据:{}", JSON.toJSONString(data)); // data是Excel的每一条数据,没一条数据都先走这里 } /** * 所有数据解析完成了 都会来调用 * * @param context AnalysisContext */ @Override public void doAfterAllAnalysed(AnalysisContext context) { // 这里也要保存数据,确保最后遗留的数据也存储到数据库 saveData(); LOGGER.info("所有数据解析完成!"); } /** * 加上存储数据库 */ private void saveData() { LOGGER.info("{}条数据,开始存储数据库!", expertSchoolEntityList.size()); // 这一步是所有数据都准备好了,准备插入数据库了 // 如果走到这里你都没有报错,恭喜你你要成功了! LOGGER.info("存储数据库成功!"); } }
SupportConditionListener层代码释义:
1,第一步走SupportConditionListener这个方法, 这一层是Controller层传过来的值,在这里接。
2,第二步走invoke这里面解析每一条Excel数据
3,第三步走doAfterAllAnalysed,这里也要保存数据,确保最后遗留的数据也存储到数据库
4,第四步走saveData,这里是把上面准备好的所有数据插入到数据库。