@Slf4j @Component public class MediaExcelListener extends AnalysisEventListener<导入注解DTO类> { @Autowired private SysCityBaseService sysCityService; private List<导入注解DTO类> listData = new ArrayList<>(); public MediaExcelListener() { } @Override public void invoke(导入注解DTO类 dto, AnalysisContext analysisContext) { 查找表里没有字段,而数据库需要存的逻辑处理 listData.add(dto); } @Override public void doAfterAllAnalysed(AnalysisContext analysisContext) { } public List<MediaExcelDTO> getListData() { return listData; }
//test测试
@ActiveProfiles("local") @SpringBootTest @RunWith(SpringRunner.class) @Slf4j public class TestImportExecl { @Autowired private MediaChannelScreenService mediaChannelService; @Autowired private MediaExcelListener mediaExcelListener; @Test public void testImportExcel() throws FileNotFoundException { File file = new File("C:\\Users\\Ric\\Desktop\\总-媒体导入模板(0901版).xlsx"); // MediaExcelListener mediaExcelListener = new MediaExcelListener(); //读取所有sheet的Excel ExcelReader excelReader = EasyExcel.read(new FileInputStream(file), MediaExcelDTO.class, mediaExcelListener).build(); excelReader.readAll(); // 这里千万别忘记关闭,读的时候会创建临时文件,到时磁盘会崩的 excelReader.finish(); List<MediaExcelDTO> mediaList = mediaExcelListener.getListData(); if (CollUtil.isEmpty(mediaList)) { throw new RuntimeException("文件为空"); } List<MediaChannel> mediaChannelList = new ArrayList<>(); for (MediaExcelDTO mediaExcelDTO : mediaList) { //循环添加到list添加进数据库里 mediaChannelList.add(mediaChannel); } boolean b = mediaChannelService.saveBatch(mediaChannelList); log.info("导入" + (b ? "成功" : "失败")); } }