说明
这篇文档处理的问题:
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;
}
}
}