<!-- EasyExcel -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>easyexcel</artifactId>
    <version>3.1.1</version>
</dependency>

1.要导入的数据结构,按层级导入

//导入excel
@PostMapping("/import")
public AjaxResult doImport(MultipartFile file){
    List<自己的实体类> list = new ArrayList<>();
    try {
        EasyExcel.read(file.getInputStream(),
            FtDataDto.class, new ReadListener(){
                @Override
                public void invoke(Object o, AnalysisContext analysisContext) {
                    //实体类格式转换
                    自己的实体类 domain = (自己的实体类)o;
                    try {
                        list.add(domain);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
                @Override
                public void doAfterAllAnalysed(AnalysisContext analysisContext) {

                }
            }).sheet().doRead();
        //调用方法处理list数据(主要将列表结构转为树状结构)
        setListInfo(list);
    } catch (Exception e) {
        e.printStackTrace();
        return AjaxResult.error("文件内容格式错误!");
    }
}

 2.然后写一个处理的方法

public Integer setListInfo(List<实体类> list) {
        //调整树状结构
        Map<Integer,Integer> map = new HashMap<>();
        //层级
        Integer level = 0;
        //上一条数据id
        Integer id = 0;
        for(int i = 0,m = list.size();i<m;i++) {
            //第一层必定为父节点
            if (i == 0){
                list.get(i).setPid(0);
                //先将父节点添加并获取他的id
                实体类Mapper.insert(list.get(i));
                //将当前id暂存,如果下一条数据层级降低,则pid就是此id
                id = list.get(i).getId();
                //暂存当前层级,用于和下一条循环比对
                level = list.get(i).getLevel();
                //暂存当前层级的pid,也就是父级id,如果之后碰到同级的,直接可以拿到,第一条pid为0
                map.put(level,0);
                //结束当前循环,开始下一次循环
                continue;
            }
            //如果层级变大,也就是上一条数据的下一级
            if (list.get(i).getLevel() > level){
                System.out.println("大于>>>>>>>>>>>>>");
                //当前层级的pid就是上一条数据的id
                list.get(i).setPid(id);
            }
            //如果层级不变
            if (list.get(i).getLevel().equals(level)){
                //当前层级的pid就是同层级的pid
                System.out.println("等于=============");
                list.get(i).setPid(map.get(level));
            }
            //如果层级变小,认为是一条新的父级
            if (list.get(i).getLevel()  < level){
                //当前层级的pid就是同层级的pid
                System.out.println("小于<<<<<<<<<<<<<<<<");
                System.out.println(list.get(i).getLevel()+"-----"+level);
                System.out.println(map);
                list.get(i).setPid(map.get(list.get(i).getLevel()));
            }
            //更新层级
            level = list.get(i).getLevel();
            //添加数据并更改id
            System.out.println(list.get(i));
            //添加数据
            实体类Mapper.insert(list.get(i));
            //暂存id
            id = list.get(i).getId();
            //暂存当前层级的pid
            map.put(level,list.get(i).getPid());
        }
        //返回数量
        return list.size();
    }

 之后导入的数据就是树状结构了,用pid进行绑定的,之后要获取数据的话就用递归或深度优先了。