繁体   English   中英

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读取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 );
        }

最后,在阅读了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转换器确实节省了时间,因为您总是会发现以科学格式(1.7702252508528E10)存储在excel中的文本值是不正确的,并且不容易将其格式化为excel文件中的文本。 使用StringConverter,所有这些操作都是自动完成的,无需再将excel文件格式化(实际上,大多数情况下,即使您在excel中将其格式化为文本,它仍会被读取为科学格式)。

也许以后,我将查看是否可以将其推回原始源。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM