我的一些域名被定义为Java 8 ZonedDateTime,LocalDate或Instant。
我正在使用jxls reader 2.03导入数据。但是,我有问题从excel读取Date单元格值到我的ZonedDateTime域属性。
我试图注册一个新的转换器类,但在我看来,无法使它工作。我的代码如下:
// 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 );
}
答案 0 :(得分:1)
最后,在阅读了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),这是不正确的,并且不容易将其格式化回excel文件中的文本。使用StringConverter,所有这些都是自动完成的,无需将文件格式化为excel文件(在大多数情况下,即使您在excel中将文本格式化为文本,它仍然以科学格式读取)。
也许,稍后我会看看我是否可以将这些推回到原始来源。