easyexcel 自定义格式化


easyexcel 自定义格式化

 

easyexcel默认不能转换localDateTime,自定义converter转换localDateTime

 

 

*******************

相关类与接口

 

Converter:T 为需要转换的java类型

public interface Converter<T> {

    Class supportJavaTypeKey();               //设置java类型
    CellDataTypeEnum supportExcelTypeKey();   //设置celldata类型

    T convertToJavaData(CellData var1, ExcelContentProperty var2, GlobalConfiguration var3) throws Exception;
    CellData convertToExcelData(T var1, ExcelContentProperty var2, GlobalConfiguration var3) throws Exception;
}

 

CellDataTypeEnum

public enum CellDataTypeEnum {
    STRING,
    DIRECT_STRING,
    NUMBER,
    BOOLEAN,
    EMPTY,
    ERROR,
    IMAGE;

 

CellData

public class CellData<T> extends AbstractCell {
    private CellDataTypeEnum type;
    private BigDecimal numberValue;
    private String stringValue;
    private Boolean booleanValue;
    private Boolean formula;
    private String formulaValue;
    private byte[] imageValue;
    private Integer dataFormat;
    private String dataFormatString;
    private T data;


*********
构造函数

    public CellData(CellData<T> other) {

    public CellData() {
    public CellData(T data) {
    public CellData(T data, String formulaValue) {

    public CellData(String stringValue) {
    public CellData(CellDataTypeEnum type, String stringValue) {
    public CellData(BigDecimal numberValue) {
    public CellData(byte[] imageValue) {
    public CellData(Boolean booleanValue) {
    public CellData(CellDataTypeEnum type) {


*********
普通方法


    public void setData(T data) {
    public void setFormula(Boolean formula) {
    public void setType(CellDataTypeEnum type) {
    public void setDataFormat(Integer dataFormat) {
    public void setDataFormatString(String dataFormatString) {

    public void setImageValue(byte[] imageValue) {
    public void setStringValue(String stringValue) {
    public void setFormulaValue(String formulaValue) {
    public void setBooleanValue(Boolean booleanValue) {
    public void setNumberValue(BigDecimal numberValue) {


    public T getData() {
    public Boolean getFormula() {
    public CellDataTypeEnum getType() {
    public Integer getDataFormat() {
    public String getDataFormatString() {

    public byte[] getImageValue() {
    public String getStringValue() {
    public String getFormulaValue() {
    public Boolean getBooleanValue() {
    public BigDecimal getNumberValue() {


    public void checkEmpty() {


*********
static 方法

    public static CellData newEmptyInstance() {
    public static CellData newEmptyInstance(Integer rowIndex, Integer columnIndex) {
    public static CellData newInstance(Boolean booleanValue) {
    public static CellData newInstance(Boolean booleanValue, Integer rowIndex, Integer columnIndex) {
    public static CellData newInstance(String stringValue, Integer rowIndex, Integer columnIndex) {
    public static CellData newInstance(BigDecimal numberValue, Integer rowIndex, Integer columnIndex) {


    public String toString() {

 

 

*******************

示例

 

**************

header 类

 

Order

@Data
public class Order {

    private Integer id;

    @DateTimeFormat("yyyy-MM-dd HH:mm:ss")
    @ExcelProperty(converter = CustomConverter.class)
    private LocalDateTime createTime;

    @DateTimeFormat("yyyy-MM-dd HH:mm:ss")
    @ExcelProperty(converter = CustomConverter.class)
    private LocalDateTime payTime;

    @NumberFormat("##.00")
    private Double totalFee;
}

 

Order2

@Data
public class Order2 {

    private Integer id;

    @DateTimeFormat("yyyy-MM-dd HH:mm:ss")
    private LocalDateTime createTime;

    @DateTimeFormat("yyyy-MM-dd HH:mm:ss")
    private LocalDateTime payTime;

    @NumberFormat("##.00")
    private Double totalFee;
}

 

**************

自定义转换器

 

CustomConverter

public class CustomConverter implements Converter<LocalDateTime> {

    @Override
    public Class<LocalDateTime> supportJavaTypeKey() {
        return LocalDateTime.class;
    }

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

    @Override
    public LocalDateTime convertToJavaData(CellData cellData, ExcelContentProperty excelContentProperty, GlobalConfiguration globalConfiguration) throws Exception {
        return LocalDateTime.parse(cellData.getStringValue(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
    }

    @Override
    public CellData<String> convertToExcelData(LocalDateTime localDateTime, ExcelContentProperty excelContentProperty, GlobalConfiguration globalConfiguration) throws Exception {
        return new CellData<>(localDateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
    }
}

 

**************

监听器

 

CustomListener

public class CustomListener extends AnalysisEventListener<Order>{

    @Override
    public void invoke(Order order, AnalysisContext analysisContext) {
        System.out.println(order);
    }

    @Override
    public void doAfterAllAnalysed(AnalysisContext analysisContext) {
        System.out.println("数据解析完成");
    }
}

 

**************

测试类

 

Test

public class Test {

    private static final String file_path="e:"+ File.separator+"java"+File.separator+"easyexcel"+File.separator+"write_test6.xlsx";
    private static final String file_path2="e:"+ File.separator+"java"+File.separator+"easyexcel"+File.separator+"write_test7.xlsx";


    public static void write(){
        EasyExcel.write(file_path,Order.class).sheet().doWrite(data());
    }

    public static void write2(){
        EasyExcel.write(file_path2, Order2.class)
                .registerConverter(new CustomConverter())
                .sheet().doWrite(data());
    }

    public static void read(){
        EasyExcel.read(file_path,Order.class,new CustomListener()).sheet().doRead();
    }

    private static List<Order> data(){
        List<Order> list=new ArrayList<>();

        Order order=new Order();
        order.setId(1);
        order.setCreateTime(LocalDateTime.now());
        order.setPayTime(LocalDateTime.now().plusMinutes(2L));
        order.setTotalFee(10d);
        list.add(order);

        return list;
    }

    public static void main(String[] args){
        write();
        write2();

        read();
    }
}

 

 

*******************

使用测试

 

write

                 

 

write2

                 

 

read

Order(id=1, createTime=2020-07-24T18:21:07, payTime=2020-07-24T18:23:07, totalFee=10.0)
数据解析完成

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据提供的引用内容,easyExcel虽然比poi更为简单api和更高性能,但是其下载格式不符合要求,需要进行个性化需求的设置。而easyExcel导出自定义图片格式,可以通过以下步骤实现: 1. 首先,需要在pom.xml文件中添加依赖: ```xml <dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>2.2.10</version> </dependency> ``` 2. 然后,在需要导出的实体类中,添加一个byte[]类型的字段,用于存储图片的二进制数据。 ```java public class DemoData { private String name; private Integer age; private byte[] image; // 省略getter/setter方法 } ``` 3. 接着,在写入Excel时,将图片的二进制数据写入到对应的单元格中。 ```java // 构造数据 List<DemoData> list = new ArrayList<>(); DemoData data = new DemoData(); data.setName("张三"); data.setAge(20); // 读取图片文件 File file = new File("image.png"); byte[] imageBytes = FileUtils.readFileToByteArray(file); data.setImage(imageBytes); list.add(data); // 写入Excel String fileName = "demo.xlsx"; String sheetName = "Sheet1"; ExcelWriter excelWriter = EasyExcel.write(fileName).build(); WriteSheet writeSheet = EasyExcel.writerSheet(sheetName).build(); excelWriter.write(list, writeSheet); excelWriter.finish(); ``` 4. 最后,在读取Excel时,将图片的二进制数据读取出来,并将其转换为图片格式。 ```java // 读取Excel String fileName = "demo.xlsx"; String sheetName = "Sheet1"; ExcelReader excelReader = EasyExcel.read(fileName).build(); ReadSheet readSheet = EasyExcel.readSheet(sheetName).build(); List<DemoData> list = excelReader.read(readSheet).head(DemoData.class).sheet().doReadSync(); // 将图片的二进制数据转换为图片格式 for (DemoData data : list) { byte[] imageBytes = data.getImage(); BufferedImage image = ImageIO.read(new ByteArrayInputStream(imageBytes)); // 处理图片 // ... } excelReader.finish(); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值