EasyExcel---转换器

概念

  • 转换器
    • 将java的数据类型(含自定义的类)转为excel数据类型
    • 将excel的数据类型转为java数据类型

思路

  1. 在开发中遇到我们需要将实体类中自定义的数据类型转化为excel中的格式,因为不能将自定义的类输出到excel中,只能用基本数据类型,所以需要转换(以下代码转换到excel为string类型,可以控制输出到excel中为某种基本数据类型)
  2. 将excel中的格式转化为我们实体类中的自定义数据类型,因为在用户修改excel数据时,可能会更改excel单元格式,所以我们需要判断单元格的格式,转为为我们实体类的固定的基本数据类型

步骤

  1. 在属性上加转换器类
  2. 写自定义转换器类,实现Converter <AdditionalConfig> ,AdditionalConfig是自定义的数据类型
  3. 写转换代码

代码

实体类

public class DeviceInfoExcel {
    /**
     * 设备id
     */
    @ExcelProperty(value="设备id",index=0)
    @ColumnWidth(45)
    private String deviceid;

    /**
     * 品牌名称
     */
    @ExcelProperty(value="品牌名称",index=1)
    @ColumnWidth(15)
    private String brandName;

    /**
     * 价格
     */
    @ExcelProperty(value="价格",index=8,converter = AdditionalConfigConverter.class)
    @ColumnWidth(15)
    private AdditionalConfig additionalConfig;
    
   public AdditionalConfig getAdditionalConfig() {
        return additionalConfig;
    }
// 注意set,要这么写,才可以将转换之后的数据进行替换
    public void setAdditionalConfig(AdditionalConfig additionalConfig) {
        this.additionalConfig=additionalConfig;
    }

自定义类型

public class AdditionalConfig {

	private double price;

	public double getPrice() {
		return price;
	}

	public void setPrice(double price) {
		this.price = price;
	}
}

转换器

package cn.testin.util;

import cn.testin.api.cfg.bean.AdditionalConfig;
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;



public class AdditionalConfigConverter implements Converter<AdditionalConfig> {

    //在java中数据类型
    @Override
    public Class supportJavaTypeKey() {
        return AdditionalConfig.class;
    }

    // 在excel中的数据类型
    @Override
    public CellDataTypeEnum supportExcelTypeKey() {
        return CellDataTypeEnum.STRING;
    }

    // 将excel的数据类型转为java数据类型
    @Override
    public AdditionalConfig convertToJavaData(CellData cellData, ExcelContentProperty excelContentProperty, GlobalConfiguration globalConfiguration) throws Exception {
        AdditionalConfig additionalConfig =new AdditionalConfig();
        CellDataTypeEnum type = cellData.getType();
        String cellMsg = "";
        // 转换格式,因为不确定excel中用户设置的单元格类型
        if (type.equals(CellDataTypeEnum.NUMBER)) {
            cellMsg = cellData.getNumberValue().toString();
        } else if (type.equals(CellDataTypeEnum.STRING)) {
            cellMsg = cellData.getStringValue();
        } else if (type.equals(CellDataTypeEnum.BOOLEAN)) {
            cellMsg = cellData.getBooleanValue().toString();
        }
        additionalConfig.setPrice(Double.parseDouble(cellMsg));
        return additionalConfig;
    }

    // 将java的数据类型转为excel数据类型
    @Override
    public CellData<AdditionalConfig> convertToExcelData(AdditionalConfig additionalConfig, ExcelContentProperty excelContentProperty, GlobalConfiguration globalConfiguration) throws Exception {
        return new CellData(String.valueOf(additionalConfig.getPrice()));
    }
}

EasyExcel转换器是一种用于将Java的数据类型(包括自定义的类)转换为Excel数据类型,或者将Excel的数据类型转换为Java数据类型的工具。它可以帮助我们在开发中将自定义的数据类型转化为Excel中的格式,以便更好地处理和导出数据。在使用EasyExcel时,如果遇到一些数据类型在导出时EasyExcel不支持的情况,我们可以使用自定义转换器来手动注入并进行转换。自定义转换器需要实现Converter接口,并重写其中的方法来实现对特定数据类型的处理。例如,在Spring Boot项目中,我们可以创建一个自定义的CharConverter类来处理Character类型的数据。在该转换器中,我们可以自定义将Character类型的数据转换为Excel中的数据格式,例如将其包装为String类型。然后,在写操作时,我们需要将这个自定义转换器注册到EasyExcel中。这样,在导出数据时,EasyExcel会自动调用我们定义的转换器来进行数据转换。通过这种方式,我们可以灵活地处理各种数据类型,满足我们的导出需求。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [EasyExcel 自定义类型转换器](https://blog.csdn.net/weixin_45535519/article/details/130291453)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [EasyExcel---转换器](https://blog.csdn.net/lclcsdnblink/article/details/116024415)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值