如图,蓝色框框里是一个空单元格,转换到javabean的date属性时会报错,会针对该问题,官方已经有比较好的处理方案。 就是使用自定义转换器对date转换的处理,我们只要实现一个逻辑,当读取到excel空串时赋值为空就可以了。下面的例子:
首先我们自定好自己的转换类:
public class RenzExcelDateConverter extends DateConverter {
@Override
public Object convert(Class type, Object value) {
if (value == null) {
return null;
} else {
double date;
if (value instanceof Double) {
date = (Double)value;
} else if (value instanceof Number) {
date = ((Number)value).doubleValue();
} else {
if (!(value instanceof String)) {
if (value instanceof Date) {
return value;
}
throw new ConversionException("No value specified");
}
try {
date = Double.parseDouble((String)value);
} catch (NumberFormatException var6) {
throw new ConversionException(var6);
}
}
return DateUtil.getJavaDate(date);
}
}
}
上面自定义转换类继承jxl本身默认的DateConverter转换类,重写convert方法即可,我们先看下默认的DateConverter类
我们重写获取空值的地方,默认返回空即可
接着我们要开启读取器的偏好设置
ReaderConfig.getInstance().setUseDefaultValuesForPrimitiveTypes( true );
然后在excel读取器类注册上我们自定义的转换类
mainReader.getConvertUtilsBeanProvider().getConvertUtilsBean().register(new RenzExcelDateConverter(), java.util.Date.class);