[我在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);`
Double.MIN_VALUE
数据验证中使用Double.MAX_VALUE
和Excel
。 Excel
对数字单元格值有更严格的限制。您无法将1.7976931348623157E308
存储在Excel
单元中,也无法存储4.9E-324
。在Excel
单元中,只能存储15个有效数字。因此,可以存储的最小数字是-9.99999999999999E307
,可以存储的最大数字是9.99999999999999E307
。因此,您必须使用该数字来限制可能的数字范围。