java - jxls reader 2.03读取日期到java 8 ZonedDatetime等

标签 java jxls

我的一些域被定义为 Java 8 ZonedDateTime、LocalDate 或 Instant。

我正在使用 jxls reader 2.03 导入数据。但是,我在将日期单元格值从 Excel 读取到我的 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 );
        }

最佳答案

最后,在阅读了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);

实际上,根据作者的代码,我还编写了另外五个转换器。日期时间转换器没什么。但是字符串转换器,它确实很节省时间,因为你总是会发现以科学格式存储在excel中的文本值(1.7702252508528E10),它是不正确的,并且不容易将其格式化回excel文件中的文本。有了StringConverter,一切都自动完成,无需返回excel文件进​​行格式化(实际上,大多数时候,即使你在excel中格式化为文本,它仍然被读取为科学格式)。

也许,稍后我会看看是否可以将它们推回原始来源。

关于java - jxls reader 2.03读取日期到java 8 ZonedDatetime等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48266368/

相关文章:

java - console.readLine() 和 console.format() : What is meant by arguments referenced by format specifiers?

Java:全局变量是否节省内存和/或时间?

java - 将 jXLS 添加到我的 pom.xml 似乎会影响 hibernate 日志级别

java - jxls、Jasper 报告或 BIRT

java - jXLS jx :image ends with java. lang.IllegalArgumentException: imgBean 值必须包含图像字节

java - 在字符串文字上调用 equals

java - 对大型 csv 文件进行快速排序

java - 编译所有子文件夹中的java文件?

java - Jxls 或杰特 : How to render a tree with formulas on parent nodes?

java - 读取和写入同一个 Excel 文件