当前位置:   article > 正文

Springboot + Easyexcel读取写入数据,多头行数,多sheet,复杂表头简单实现_@excelproperty

@excelproperty

Springboot + Easyexcel 读取数据

简单读取excel文件

读取下图的 excel 数据

在这里插入图片描述

导入依赖,阿里的easyexcel插件

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>easyexcel</artifactId>
    <version>2.1.6</version>
</dependency>
  • 1
  • 2
  • 3
  • 4
  • 5

创建一个用来 读取 excel的实体类

实体类的属性可以用

@ExcelProperty(index = 0),index=0,找的是上图 A列(第一列)

@ExcelProperty(value = “标号”)

两种都可以用,但是不要两个一起用

实体类:

public class TemplateEntity {

    @ExcelProperty("标号")
    private Integer label;

    @ExcelProperty("字符串")
    private String str;

    @ExcelProperty("数字")
    private Integer num;
    //getter/setter 省略
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

定义一个 监听类:

public class TemplateListener extends AnalysisEventListener<TemplateEntity> {

    private List<TemplateEntity> list = new ArrayList<>();

    // 一条一条读取数据,全部添加到list集合里
    @Override
    public void invoke(TemplateEntity data, AnalysisContext analysisContext) {
        list.add(data);
    }
    @Override
    public void doAfterAllAnalysed(AnalysisContext analysisContext) {}

    public List<TemplateEntity> getData() {
        return list;
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

service:

public interface TemplateService {

    /**
     * 导入excel
     */
    Result importExcel(MultipartFile file) throws IOException;
}


@Service
public class TemplateServiceImpl implements TemplateService {
    @Override
    public Result importExcel(MultipartFile file) throws IOException{
        List<TemplateEntity> entities = getTemplateEntities(file);
        // 处理数据
        System.out.println(entities);
        return Result.success(entities);
    }
    // 读取 excel 数据
    private List<TemplateEntity> getTemplateEntities(MultipartFile file) throws IOException {
        TemplateListener listener = new TemplateListener();	// 定义的 listener
        EasyExcel.read(file.getInputStream(), TemplateEntity.class, listener).sheet().doRead();
        
        // 返回 所有数据
        return listener.getData();
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27

Controller 上传文件接口

@RestController
@RequestMapping("/sys")
public class TemplateController {

    @Autowired
    private TemplateService templateService;

    @RequestMapping("/import")
    public Result importData(@RequestPart("file") MultipartFile file) throws IOException{
        return templateService.importExcel(file);
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

Postman测试

{
    "code": 200,
    "msg": "处理成功",
    "data": [
        {
            "label": 1,
            "str": "a",
            "num": 20
        },
        {
            "label": 2,
            "str": "b",
            "num": 30
        },
        {
            "label": 3,
            "str": "c",
            "num": 40
        },
       ...
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

日期格式

excel文件

在这里插入图片描述

实体类中可以使用@DateFormat(阿里包下的)注解:

要使用String类型来接收数据才有用

public class TemplateEntity {

    @ExcelProperty("标号")
    private Integer label;

    @ExcelProperty("字符串")
    private String str;

    @ExcelProperty("数字")
    private Integer num;
 	
    @ExcelProperty("时间")
    // 这里需要用string接收才会格式化
    @DateTimeFormat("yyyy-MM-dd")
    private String date;
    // getter/setter省略
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

多sheet

两sheet表头数据不一致

这里为了演示效果,sheet1和sheet3是不同表头的,sheet2目前是空的数据表

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AI算法构造者/article/detail/61114
推荐阅读
相关标签
  

闽ICP备14008679号