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()));
    }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值