使用MS-Excel打开.xlsx时遇到问题,其中使用APACHE POI XSSFDataValidationHelper进行数字和日期验证

问题描述 投票:0回答:1

[我在Java中使用Apache POI 3.17,XSSFDataValidationHelper在.xlsx文件中添加了对日期和数值等数据的验证,但是每当我使用MS-Excel打开文件时,它都会显示

“我们在中发现了一些内容存在问题。您是否要我们尝试尽可能多地恢复文件?如果您信任此工作簿的来源,请单击“是”。

当我检查此错误时,我得到了,当文件部分损坏或完全损坏时,会发生这种情况。

[此问题仅出现在我使用过如上所述的任何类型的数据验证的那些.xlsx文件上,但是如果我在Linux环境中打开该.xlsx文件,也不会发生此问题。

P.S:我最后关闭工作簿和FileOutputStream,在工作簿下创建了至少一张纸(显然)

PFB用于数据验证的代码段:-

`XSSFDataValidationHelper dataValidationHelper = new XSSFDataValidationHelper(sheet);

        XSSFDataValidationConstraint numberValidationConstraint =
                (XSSFDataValidationConstraint)
                        dataValidationHelper.createNumericConstraint(
                                XSSFDataValidationConstraint.ValidationType.DECIMAL,
                                XSSFDataValidationConstraint.OperatorType.BETWEEN,
                                String.valueOf(Double.MIN_VALUE),
                                String.valueOf(Double.MAX_VALUE)
                        );

        CellRangeAddressList addressList = new CellRangeAddressList(
                2, 2000, columnCounter, columnCounter);
        XSSFDataValidation numberValidation =(XSSFDataValidation)dataValidationHelper.createValidation(
                numberValidationConstraint, addressList);
        numberValidation.setSuppressDropDownArrow(false);
        numberValidation.setShowErrorBox(true);
        numberValidation.createErrorBox("Invalid data","Only numbers are allowed");
        sheet.addValidationData(numberValidation);`
java excel spring-mvc apache-poi xssf
1个回答
1
投票
您无法在Double.MIN_VALUE数据验证中使用Double.MAX_VALUEExcelExcel对数字单元格值有更严格的限制。您无法将1.7976931348623157E308存储在Excel单元中,也无法存储4.9E-324。在Excel单元中,只能存储15个有效数字。因此,可以存储的最小数字是-9.99999999999999E307,可以存储的最大数字是9.99999999999999E307。因此,您必须使用该数字来限制可能的数字范围。
© www.soinside.com 2019 - 2024. All rights reserved.