easyExcel读取表格,参数转换问题

说明

这篇文档处理的问题:
Excel中录入的数据是男或者女,我们需要将男和女转换成数字类型1或者0,然后保存在数据库中。
示例:
在这里插入图片描述

总结

就是写一个类实现Converter<T>接口即可

public class CustomStringStringConverter implements Converter<String> {
    @Override
    public Class<?> supportJavaTypeKey() {
        return String.class;
    }

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

    /**
     * 这里读的时候会调用
     *
     * @param context
     * @return
     */
    @Override
    public String convertToJavaData(ReadConverterContext<?> context) {
        return "自定义:" + context.getReadCellData().getStringValue();
    }

    /**
     * 这里是写的时候会调用 不用管
     *
     * @return
     */
    @Override
    public WriteCellData<?> convertToExcelData(WriteConverterContext<String> context) {
        return new WriteCellData<>(context.getValue());
    }

}

在这里插入图片描述

官方文档:

代码演示

请求类

/**
 * @author HuangLongFei
 * @since 2023/04/13
 **/
@Data
public class UploadExcelRequest {
    @NotNull(message = "文件不能为空!")
    private MultipartFile file;
}

controller

@RequestMapping("/excel/api/v1")
@RestController
@Validated
@Slf4j
public class ExcelController {

    @Autowired
    private ExcelService excelService;

    @PostMapping("upload")
    public Response<Void> uploadExcel(@ModelAttribute @Valid UploadExcelRequest request) {
        excelService.uploadExcel(request);
        return Response.success();
    }
}

service

/**
 * @author HuangLongFei
 * @since 2023/04/13
 **/
public interface ExcelService {
    /**
     * 上传Excel文件导入数据
     *
     * @param request 文件信息
     * @author HuangLongFei
     * @since 2023/4/13
     */
    void uploadExcel(UploadExcelRequest request);
}

serviceImpl

/**
 * @author HuangLongFei
 * @since 2023/04/13
 **/
@Service
public class ExcelServiceImpl implements ExcelService {
    @Override
    public void uploadExcel(UploadExcelRequest request) {
        // multipartFile 转为 file
        File file = null;
        try {
            file = FileUtils.multipartFileToFile(request.getFile());
        } catch (Exception e) {
            throw new ExampleException(ExceptionEnum.DOCUMENT_TYPE_NOT_EXIST.getCode());
        }
        List<PersonEntity> excelList = EasyExcel.read(file).head(PersonEntity.class).headRowNumber(1).doReadAllSync();
        if (CollectionUtils.isEmpty(excelList)) {
            throw new ExampleException(ExceptionEnum.DOCUMENT_TYPE_NOT_EXIST.getCode());
        }
        // 读取Excel会读取空行,此处为了过滤数据
        PersonEntity excelEntity = new PersonEntity();
        excelList.removeAll(Collections.singleton(excelEntity));
        excelList.forEach(System.out::println);
        // 其他操作
    }
}

PersonEntity

/**
 * @author HuangLongFei
 * @since 2023/04/13
 **/
@Data
public class PersonEntity {
    @ExcelProperty(index = 0)
    private Integer number;
    @ExcelProperty(index = 1)
    private String name;
    @ExcelProperty(index = 2)
    private Integer age;
    @ExcelProperty(index = 3, converter = SexConverter.class)
    private Integer sex;
}

SexConverter

/**
 * @author HuangLongFei
 * @since 2023/04/13
 **/
public class SexConverter implements Converter<Integer> {
    @Override
    public Class<?> supportJavaTypeKey() {
        return Converter.super.supportJavaTypeKey();
    }

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

    @Override
    public Integer convertToJavaData(ReadConverterContext<?> context) throws Exception {
        String value = context.getReadCellData().getStringValue();
        switch (value) {
            case "男":
                return 1;
            case "女":
                return 0;
            default:
                return null;
        }
    }
}

结果

在这里插入图片描述

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值