jxls reader 2.03 读取日期到 java 8 ZonedDatetime 等
jxls reader 2.03 read date to java 8 ZonedDatetime etc
我的一些域被定义为 Java 8 ZonedDateTime、LocalDate 或 Instant。
我正在使用 jxls reader 2.03 导入数据。但是,我无法将日期单元格值从 excel 读取到我的 ZonedDateTime 域 属性。
我已经尝试注册一个新的转换器 class,但是在我看来,它无法正常工作。我的代码如下:
// 1) Trying this way, cannot read
ConvertUtils.register(new ZonedDateTimeConverter(), java.time.ZonedDateTime.class);
XLSReadStatus readStatus;
log.info("Running excel engine to read " + uploadFileWithPath);
try(InputStream inputXML = new FileInputStream(xmlConfigModel)){
ReaderConfig.getInstance().setSkipErrors( true );
ReaderConfig.getInstance().setUseDefaultValuesForPrimitiveTypes( true );
XLSReader mainReader = ReaderBuilder.buildFromXML( inputXML );
//2) Trying second way, cannot read ZonedDateTime either.
mainReader.getConvertUtilsBeanProvider().getConvertUtilsBean().register(new ZonedDateTimeConverter(), java.time.ZonedDateTime.class);
try (InputStream inputXLS = new FileInputStream(uploadFileWithPath)){
Map beans = new HashMap();
beans.put("items", items);
readStatus = mainReader.read( inputXLS, beans);
jpaRepository.save(items);
log.info("read "+ items.size() +" rows data from excel:" + uploadFileWithPath );
}
最后,看完jxls的源码,下面的方式就可以了。之前,我的转换器出了点问题。
XLSReader mainReader = ReaderBuilder.buildFromXML( inputXML );
mainReader.getConvertUtilsBeanProvider().getConvertUtilsBean().register(new ZonedDateTimeConverter(), java.time.ZonedDateTime.class);
mainReader.getConvertUtilsBeanProvider().getConvertUtilsBean().register(new LocalDateConverter(), java.time.LocalDate.class);
mainReader.getConvertUtilsBeanProvider().getConvertUtilsBean().register(new InstantConverter(), java.time.Instant.class);
mainReader.getConvertUtilsBeanProvider().getConvertUtilsBean().register(new StringConverter(), java.lang.String.class);
其实根据作者的代码,我还写了另外五个转换器。日期时间转换器什么都不是。但是String转换器,真的很省时,因为你总是会发现excel中存储的文本值是科学格式(1.7702252508528E10),它是不正确的,并且不容易将其格式化回[中的文本=17=] 文件。使用 StringConverter,全部自动完成,无需返回到 excel 文件进行格式化(实际上,大多数时候,即使您在 excel 中将其格式化为文本,它仍然被读取为科学格式) .
也许吧,以后我看看能不能把这些推回原处。
我的一些域被定义为 Java 8 ZonedDateTime、LocalDate 或 Instant。
我正在使用 jxls reader 2.03 导入数据。但是,我无法将日期单元格值从 excel 读取到我的 ZonedDateTime 域 属性。
我已经尝试注册一个新的转换器 class,但是在我看来,它无法正常工作。我的代码如下:
// 1) Trying this way, cannot read
ConvertUtils.register(new ZonedDateTimeConverter(), java.time.ZonedDateTime.class);
XLSReadStatus readStatus;
log.info("Running excel engine to read " + uploadFileWithPath);
try(InputStream inputXML = new FileInputStream(xmlConfigModel)){
ReaderConfig.getInstance().setSkipErrors( true );
ReaderConfig.getInstance().setUseDefaultValuesForPrimitiveTypes( true );
XLSReader mainReader = ReaderBuilder.buildFromXML( inputXML );
//2) Trying second way, cannot read ZonedDateTime either.
mainReader.getConvertUtilsBeanProvider().getConvertUtilsBean().register(new ZonedDateTimeConverter(), java.time.ZonedDateTime.class);
try (InputStream inputXLS = new FileInputStream(uploadFileWithPath)){
Map beans = new HashMap();
beans.put("items", items);
readStatus = mainReader.read( inputXLS, beans);
jpaRepository.save(items);
log.info("read "+ items.size() +" rows data from excel:" + uploadFileWithPath );
}
最后,看完jxls的源码,下面的方式就可以了。之前,我的转换器出了点问题。
XLSReader mainReader = ReaderBuilder.buildFromXML( inputXML );
mainReader.getConvertUtilsBeanProvider().getConvertUtilsBean().register(new ZonedDateTimeConverter(), java.time.ZonedDateTime.class);
mainReader.getConvertUtilsBeanProvider().getConvertUtilsBean().register(new LocalDateConverter(), java.time.LocalDate.class);
mainReader.getConvertUtilsBeanProvider().getConvertUtilsBean().register(new InstantConverter(), java.time.Instant.class);
mainReader.getConvertUtilsBeanProvider().getConvertUtilsBean().register(new StringConverter(), java.lang.String.class);
其实根据作者的代码,我还写了另外五个转换器。日期时间转换器什么都不是。但是String转换器,真的很省时,因为你总是会发现excel中存储的文本值是科学格式(1.7702252508528E10),它是不正确的,并且不容易将其格式化回[中的文本=17=] 文件。使用 StringConverter,全部自动完成,无需返回到 excel 文件进行格式化(实际上,大多数时候,即使您在 excel 中将其格式化为文本,它仍然被读取为科学格式) .
也许吧,以后我看看能不能把这些推回原处。