springboot使用EasyExcel 导入导出excel表格

一、EasyExcel 是什么?

EasyExcel 是阿里巴巴开源的一个 Java Excel 处理工具,它基于 Apache POI 进行封装,提供了更简洁的 API,使得开发者可以更方便地读取和写入 Excel 文件。

EasyExcel 的主要特点包括:

1.简单易用:EasyExcel 提供了简洁的 API,使得开发者可以快速上手,无需深入了解 Apache POI 的复杂 API。

2.性能优化:EasyExcel 对 Apache POI 进行了优化,减少了内存的使用,提高了读写 Excel 文件的性能。

3.功能丰富:EasyExcel 支持 Excel 的各种格式,包括单元格样式、公式、图片、图表等。

4.支持多种 Excel 格式:EasyExcel 支持 .xls 和 .xlsx 格式的 Excel 文件。

5.支持流式读写:EasyExcel 支持流式读写 Excel 文件,可以处理非常大的 Excel 文件。

EasyExcel 的核心注解用于定义如何将 Java 对象映射到 Excel 文件的单元格。

以下是一些常用的注解:

1.@ExcelProperty:用于指定 Java 对象的属性与 Excel 文件中的列的映射关系。你可以通过 value 属性指定列的标题,通过 index 属性指定列的索引,converter 自定义转换器。

2.@ExcelIgnore:用于忽略 Java 对象的某个属性,使其不被写入到 Excel 文件中。

3.@ExcelIgnoreUnannotated:用于忽略没有使用 EasyExcel 注解的 Java 对象的属性。

4.@ExcelFormat:用于指定日期或数字的格式。

5.@ExcelCollection:用于指定 Java 对象的集合属性与 Excel 文件中的行的映射关系。

作用于类上面就是全局,属性上面就是当列

6.@HeadRowHeight(value = 30)  // 头部行高

7.@ContentRowHeight(value = 25) // 内容行高

8.@HeadFontStyle(fontName = "宋体", fontHeightInPoints = 11)

二、使用EasyExcel 

1、导出excel表格

(1)pom.xml导入easyexcel依赖


        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>easyexcel</artifactId>
            <version>3.2.1</version>
        </dependency>

(2)新建实体类

@Data
@AllArgsConstructor
@NoArgsConstructor
public class UserDO {
    @ExcelProperty(value = "用户编号",index = 0)
    @ColumnWidth(20)
    private Long id;

    @ExcelProperty(value = "用户名",index = 1)
    @ColumnWidth(20)
    private String username;

    @ExcelProperty(value = "性别", converter = GenderConverter.class,index = 2)
    @ColumnWidth(10)
    private Integer gender;

}

(3)新建性别转换器

/**
 * Excel 性别转换器
 *
 */
public class GenderConverter implements Converter<Integer> {
    @Override
    public Class<?> supportJavaTypeKey() {
        return Integer.class;
    }

    @Override
    public CellDataTypeEnum supportExcelTypeKey() {
        return CellDataTypeEnum.STRING;
    }

    @Override
    public Integer convertToJavaData(ReadConverterContext<?> context) {
        return (context.getReadCellData().getStringValue()).equals("男性")?1:2;
    }

    @Override
    public WriteCellData<?> convertToExcelData(WriteConverterContext<Integer> context) {
        return new WriteCellData<>(context.getValue()==1?"男性":"女性");
    }
}

(4)新建数据处理类

public class ExcelExportService {

    public void exportExcel(String filePath) {
        // 准备数据
        List<UserDO> userList = prepareData();

        // 创建ExcelWriter对象
        ExcelWriter excelWriter = EasyExcel.write(filePath, UserDO.class).build();

        // 创建WriteSheet对象
        WriteSheet writeSheet = EasyExcel.writerSheet("用户信息").build();

        // 将数据写入Excel
        excelWriter.write(userList, writeSheet);

        // 关闭ExcelWriter对象
        excelWriter.finish();
    }

    private List<UserDO> prepareData() {
        // 创建测试数据
        List<UserDO> userList = new ArrayList<>();
        userList.add(new UserDO(1l,"张三",1));
        userList.add(new UserDO(2l,"李四", 1));
        userList.add(new UserDO(3l,"王五", 2));
        return userList;
    }

    public static void main(String[] args) throws CloneNotSupportedException {
        ExcelExportService excelExportService = new ExcelExportService();
        excelExportService.exportExcel("user.xlsx");
    }
}

导出成功

2、导入excel表格

(1)新建excel监听类

public class ExcelListener extends AnalysisEventListener<UserDO> {

    //创建list集合封装最终的数据
    public static List<UserDO> list = new ArrayList<>();
    //一行一行去读取excle内容,把每行的内容封装到实体类对象中
    //注:读取是从第二行开始读取,第一行默认为表头,不进行读取。
    @Override
    public void invoke(UserDO userDO, AnalysisContext analysisContext) {
        if (userDO.getUsername()!=null) {
            // 文件重复部分不再插入
            if (!list.contains(userDO)) {
                list.add(userDO);
            }
        }

    }
    //读取excel表头信息,headMap即为表头信息
    @Override
    public void invokeHeadMap(Map<Integer, String> headMap, AnalysisContext context) {
        System.out.println("表头信息:"+headMap);
    }
    //读取完成后执行
    @Override
    public void doAfterAllAnalysed(AnalysisContext analysisContext) {
    }

}

(2)在数据处理类添加获取excel表格方法

public void getExcel(String filePath) {
        String fileName = filePath;
        // 这里 需要指定读用哪个class去读,然后读取第一个sheet 文件流会自动关闭
        //read方法的三个参数:第一个:文件名;第二个:实体类的Class对象;第三个:监听器的对象
        EasyExcel.read(fileName, UserDO.class, new ExcelListener()).sheet("用户信息").doRead();
        System.out.println(ExcelListener.list);
    }

(3)启动并打印

public static void main(String[] args) throws CloneNotSupportedException {
        ExcelExportService excelExportService = new ExcelExportService();
//        excelExportService.exportExcel("user.xlsx");
        excelExportService.getExcel("user.xlsx");
    }

控制台信息

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值