SpringBoot集成阿里easyexcel(四)Converter导入导出数据转换器

SpringBoot集成阿里easyexcel(四)Converter导入导出数据转换器

通过com.alibaba.excel.converters.Converter转换器实现Excel导入导出时Java数据与Excel数据的转换。可用于枚举值转换或者数值格式转换(也可直接在字段上使用@NumberFormat(“0.#%”))
一、定义功能功能转换器
实现Converter,T为需要转换成的Java的数据类型。convertToJavaData为转换为Java数据的方法,convertToExcelData为转换为Excel数据的方法,

package com.richstonedt.cmp.model.common;

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

import java.text.DecimalFormat;

public class NumberConverter implements Converter<Float> {
    @Override
    public Class supportJavaTypeKey() {
        return Float.class;
    }

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

    @Override
    public Float convertToJavaData(CellData cellData, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception {
    	//cellData是当前单元格的数据
        if(cellData.getStringValue()==null){
            return Float.valueOf(cellData.getNumberValue().floatValue());
        }else {
            return Float.valueOf(cellData.getStringValue());
        }
    }

    @Override
    public CellData convertToExcelData(Float value, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception {
    	//value是当前需要转换为单元格数据的JAVA数据
        DecimalFormat format=new DecimalFormat("0.0#");
        return new CellData(format.format(value.floatValue()));
    }
}
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在使用easyExcel导出时,可以通过实现`com.alibaba.excel.converters.Converter`接口自定义数据转换器,并将其注册到对应的列中。在自定义数据转换器中,可以访问数据库并进行数据查询。 以下是一个简单的示例,假设我们需要将某一列的数据转换成对应的用户姓名: 1. 首先定义一个实体类 `User`,包含用户ID和姓名两个属性。 ```java public class User { private Long id; private String name; // getter and setter... } ``` 2. 实现一个自定义数据转换器 `UserIdToNameConverter`,将用户ID转换成对应的用户姓名,示例代码如下: ```java public class UserIdToNameConverter implements Converter<Long> { @Override public Class<Long> supportJavaTypeKey() { return Long.class; } @Override public CellData<String> convertToExcelData(Long value, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception { // 查询数据库获取用户姓名 User user = getUserById(value); if (user != null) { return new CellData<>(user.getName()); } else { return new CellData<>(""); } } private User getUserById(Long userId) { // TODO: 查询数据库获取用户信息 return null; } } ``` 3. 在导出excel时,将自定义数据转换器注册到对应的列中,示例代码如下: ```java // 定义表头 List<List<String>> head = ... // 定义数据 List<List<Long>> data = ... // 将第2列(从0开始计数)的数据转换成用户姓名 Converter converter = new UserIdToNameConverter(); ExcelWriter writer = EasyExcel.write(fileName).head(head).registerConverter(converter).build(); writer.write(data, ...); writer.finish(); ``` 通过实现自定义数据转换器,我们可以实现灵活的数据转换逻辑,并且可以在转换过程中访问数据库等外部资源。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值