EasyExcel 自定义枚举类型装换

目录

前言

1. 定义枚举类型

2. 定义数据模型

3. 实现自定义转换器

4. 注解数据模型

5. 读写Excel文件

读取Excel文件

写入Excel文件

总结


前言

在使用EasyExcel处理Excel文件时,自定义枚举类型的转换是非常常见的需求。EasyExcel提供了一些机制来实现这种转换,使得枚举类型的数据可以顺利地读取和写入Excel文件。

下面是一个示例,展示如何在EasyExcel中实现自定义枚举类型的转换。

1. 定义枚举类型

首先,定义一个枚举类型。假设我们有一个表示性别的枚举类型:

public enum GenderEnum {
    MALE("男"),
    FEMALE("女");

    private final String value;

    GenderEnum(String value) {
        this.value = value;
    }

    public String getValue() {
        return value;
    }

    // 通过值获取枚举
    public static GenderEnum fromValue(String value) {
        for (GenderEnum gender : GenderEnum.values()) {
            if (gender.getValue().equals(value)) {
                return gender;
            }
    }
        return null;
    }
}

2. 定义数据模型

接下来,定义一个包含枚举类型的数据模型。假设我们有一个User类:

import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.write.style.ColumnWidth;
import com.alibaba.excel.annotation.write.style.ContentRowHeight;
import com.alibaba.excel.annotation.write.style.HeadRowHeight;

@ContentRowHeight(20)
@HeadRowHeight(20)
@ColumnWidth(20)
public class User {
    @ExcelProperty("姓名")
    private String name;

    @ExcelProperty("性别")
    private GenderEnum gender;

    // Getters and Setters

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public GenderEnum getGender() {
        return gender;
    }

    public void setGender(GenderEnum gender) {
        this.gender = gender;
    }
}

3. 实现自定义转换器

EasyExcel提供了Converter接口来实现自定义的类型转换。我们需要实现这个接口来处理枚举类型的读写转换

import com.alibaba.excel.converters.Converter;
import com.alibaba.excel.metadata.CellData;
import com.alibaba.excel.metadata.GlobalConfiguration;
import com.alibaba.excel.metadata.property.ExcelContentProperty;

public class GenderEnumConverter implements Converter<GenderEnum> {

    @Override
    public Class<GenderEnum> supportedJavaTypeKey() {
        return GenderEnum.class;
    }

    @Override
    public Class<String> supportedExcelTypeKey() {
        return String.class;
    }

    @Override
    public GenderEnum convertToJavaData(CellData cellData, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) {
        return GenderEnum.fromValue(cellData.getStringValue());
    }

    @Override
    public CellData convertToExcelData(GenderEnum content, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) {
        if (content == null) {
            return new CellData("");
        }
        return new CellData(content.getValue());
    }
}

4. 注解数据模型

在数据模型中使用@ExcelProperty注解,并指定自定义转换器:

import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.write.style.ColumnWidth;
import com.alibaba.excel.annotation.write.style.ContentRowHeight;
import com.alibaba.excel.annotation.write.style.HeadRowHeight;

@ContentRowHeight(20)
@HeadRowHeight(20)
@ColumnWidth(20)
public class User {
    @ExcelProperty("姓名")
    private String name;

    @ExcelProperty(value = "性别", converter = GenderEnumConverter.class)
    private GenderEnum gender;

    // Getters and Setters

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public GenderEnum getGender() {
        return gender;
    }

    public void setGender(GenderEnum gender) {
        this.gender = gender;
    }
}

5. 读写Excel文件

最后,使用EasyExcel的API读写包含枚举类型的数据的Excel文件。

读取Excel文件
import com.alibaba.excel.EasyExcel;

import java.util.List;

public class ReadExcelExample {
    public static void main(String[] args) {
        String filename = "users.xlsx";
        List<User> users = EasyExcel.read(filename).sheet().doReadSync();
        for (User user : users) {
            System.out.println(user.getName() + " - " + user.getGender());
        }
    }
}
写入Excel文件
import com.alibaba.excel.EasyExcel;

import java.util.ArrayList;
import java.util.List;

public class WriteExcelExample {
    public static void main(String[] args) {
        String filename = "users_output.xlsx";
        List<User> users = new ArrayList<>();
        users.add(new User("张三", GenderEnum.MALE));
        users.add(new User("李四", GenderEnum.FEMALE));

        EasyExcel.write(filename, User.class).sheet("用户信息").doWrite(users);
    }
}

总结

通过上述步骤,你可以轻松地在EasyExcel中实现自定义枚举类型的转换。

主要步骤包括:

  1. 定义枚举类型。
  2. 定义数据模型并注解字段。
  3. 实现自定义转换器。
  4. 使用EasyExcel的API读写Excel文件。

希望这些步骤对你有所帮助!如果你有更多的问题或需要进一步的帮助,请随时提问

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值