SpringBoot项目使用“EasyExcel”导入Excel数据

本人操作的项目SpringBoot项目,直接代码展示!!

以下代码可以直接复制,然后到自己的项目中进行微调。

别问!!!问我就是雷锋~

第一步:导入EasyExcel的pom

properties标签下引入本人使用的是2.1.6版本鸭~
<easyexcel.version>2.1.6</easyexcel.version>
dependencies标签下引入

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>easyexcel</artifactId>
    <version>${easyexcel.version}</version>
</dependency>

到这里,准备工作就做好了,下面进行正式代码环节#

**注意事项:

1,Controller层,文件地址必须和自己电脑的保持一致,最好去文件夹上面复制路径。

2,每个导入都有自己写导入逻辑的文件,结构都是一样的,具体内容则需修改。

3,接口里面有DTO,每个字段需要和excel里面的列对应,同时不需要序号列可以直接删除,第一行必须是列表述,否则会丢失一行数据。

Controller层代码:

public JsonResult<String> importGroupSchoolUser() 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<SupportConditionDTO> {
    private static final Logger LOGGER = LoggerFactory.getLogger(SupportConditionListener.class);
    /**
     * 每隔5条存储数据库,实际使用中可以3000条,然后清理list ,方便内存回收
     */
    private static final int BATCH_COUNT = 1000;
    List<SchoolEntity> schoolEntityList = new ArrayList<>();

    List<ExpertSchoolEntity> expertSchoolEntityList = new ArrayList<>();

    List<ExpertGroupEntity> expertGroupEntityList = new ArrayList<>();

    List<ExpertGroupSchoolEntity> expertGroupSchoolEntityList = new ArrayList<>();

    List<ExpertSchoolInfoScoreSchoolInfoDTO> expertSchoolInfoScoreSchoolInfoDTOList = new ArrayList<>();

    List<SchoolIndicatorDetailEntity> 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<SchoolEntity> 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,这里是把上面准备好的所有数据插入到数据库。

最后,希望各位卑微的码农能尽快导入自己的数据,早日脱离代码行业,哈哈哈哈哈哈哈哈哈。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
使用EasyExcel导入Excel文件非常简单,只需要遵循以下步骤: 1. 在pom.xml文件中添加easyexcel依赖: ```xml <dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>2.2.2</version> </dependency> ``` 2. 创建一个实体类来存储Excel表格中的数据。 ```java @Data public class ExcelData { private String name; private Integer age; private String email; } ``` 3. 创建一个Excel读取器类。 ```java public class ExcelReader { public static List<ExcelData> readExcel(String fileName) throws Exception { InputStream inputStream = new FileInputStream(fileName); ExcelReader excelReader = new ExcelReader(inputStream, null, new ExcelListener()); excelReader.read(); List<ExcelData> dataList = ((ExcelListener)excelReader.getEventListener()).getDataList(); inputStream.close(); return dataList; } } ``` 4. 创建一个Excel监听器类,用于处理Excel表格中的数据。 ```java public class ExcelListener extends AnalysisEventListener<ExcelData> { private List<ExcelData> dataList = new ArrayList<>(); @Override public void invoke(ExcelData excelData, AnalysisContext analysisContext) { dataList.add(excelData); } @Override public void doAfterAllAnalysed(AnalysisContext analysisContext) { } public List<ExcelData> getDataList() { return dataList; } public void setDataList(List<ExcelData> dataList) { this.dataList = dataList; } } ``` 5. 在Controller中调用ExcelReader类的readExcel方法来读取Excel文件中的数据。 ```java @RestController public class ExcelController { @RequestMapping("/importExcel") public String importExcel(@RequestParam("file") MultipartFile file) { try { String fileName = file.getOriginalFilename(); List<ExcelData> dataList = ExcelReader.readExcel(fileName); // 处理数据 return "导入成功"; } catch (Exception e) { e.printStackTrace(); return "导入失败"; } } } ``` 这样就可以使用EasyExcel导入Excel文件了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值