文章目录
- 1. 实现ObjectConverter
- 2. 使用
- 3. 测试
- 3.1 导出excel
- 3.2 导入excel
1. 实现ObjectConverter
package com.tophant.cloud.common.excel.converters;import cn.hutool.json.JSONUtil;
import com.alibaba.excel.converters.Converter;
import com.alibaba.excel.enums.CellDataTypeEnum;
import com.alibaba.excel.metadata.GlobalConfiguration;
import com.alibaba.excel.metadata.data.ReadCellData;
import com.alibaba.excel.metadata.data.WriteCellData;
import com.alibaba.excel.metadata.property.ExcelContentProperty;import java.lang.reflect.Type;/*** 对象转换器* 支持转换字段类型为自定义实体,List<实体>,List<String>,Map<String,实体>等** @author wan.fei* @date 2023/08/26*/
public class ObjectConverter implements Converter<Object> {@Overridepublic Class<?> supportJavaTypeKey() {return Object.class;}@Overridepublic CellDataTypeEnum supportExcelTypeKey() {return CellDataTypeEnum.STRING;}/*** 转换从excel中读取的数据为ExcelVO中定义的字段类型(自定义实体,List<实体>,List<String>,Map<String,实体>等)** @param cellData 单元格数据* @param contentProperty 内容属性* @param globalConfiguration 全局配置* @return {@link Object}* @throws Exception 异常*/@Overridepublic Object convertToJavaData(ReadCellData cellData, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception {String stringValue = cellData.getStringValue();// 获取定义的实体字段的实际类型,包括泛型参数信息Type genericType = contentProperty.getField().getGenericType();return JSONUtil.toBean(stringValue, genericType, false);}/*** 转换数据为json字符串,写入到excel文件** @param value 价值* @param contentProperty 内容属性* @param globalConfiguration 全局配置* @return {@link WriteCellData}<{@link ?}>* @throws Exception 异常*/@Overridepublic WriteCellData<?> convertToExcelData(Object value, ExcelContentProperty contentProperty,GlobalConfiguration globalConfiguration) throws Exception {String json = JSONUtil.toJsonStr(value);return new WriteCellData<String>(json);}
}
2. 使用
3. 测试
3.1 导出excel
手动添加一些数据
导出
写入excel
转换成功
3.2 导入excel
将上面生成的excel
文件导入
读取excel
数据并转换成功