package cn.iocoder.yudao.framework.excel.core.convert;
|
|
import cn.idev.excel.converters.Converter;
|
import cn.idev.excel.enums.CellDataTypeEnum;
|
import cn.idev.excel.metadata.GlobalConfiguration;
|
import cn.idev.excel.metadata.data.ReadCellData;
|
import cn.idev.excel.metadata.data.WriteCellData;
|
import cn.idev.excel.metadata.property.ExcelContentProperty;
|
|
/** Excel 是/否字段,拒绝无法识别的值,避免错误值被静默解析为否。 */
|
public class YesNoBooleanConverter implements Converter<Boolean> {
|
@Override
|
public Class<?> supportJavaTypeKey() { return Boolean.class; }
|
|
@Override
|
public CellDataTypeEnum supportExcelTypeKey() { return CellDataTypeEnum.STRING; }
|
|
@Override
|
public Boolean convertToJavaData(ReadCellData<?> data, ExcelContentProperty property, GlobalConfiguration config) {
|
if (data.getType() == CellDataTypeEnum.BOOLEAN) return data.getBooleanValue();
|
String value = data.getType() == CellDataTypeEnum.NUMBER && data.getNumberValue() != null
|
? data.getNumberValue().stripTrailingZeros().toPlainString() : data.getStringValue();
|
if (value == null || value.trim().isEmpty()) return null;
|
switch (value.trim().toLowerCase(java.util.Locale.ROOT)) {
|
case "是": case "true": case "1": return true;
|
case "否": case "false": case "0": return false;
|
default: throw new IllegalArgumentException("是否需要来料检验仅支持是、否、1 或 0");
|
}
|
}
|
|
@Override
|
public WriteCellData<?> convertToExcelData(Boolean value, ExcelContentProperty property, GlobalConfiguration config) {
|
return new WriteCellData<>(Boolean.TRUE.equals(value) ? "是" : "否");
|
}
|
}
|