使用apachepoi库创建下拉列表导致java Excel corrput
需要说明
我需要用Apache POI
在Excel中创建一个下拉列表。此列表应包含字符串
代码
XSSFSheet sheet = workbook.getSheet(fieldName.getTabName());
XSSFDataValidationHelper helper = new XSSFDataValidationHelper(sheet);
XSSFDataValidationConstraint dvConstraint = (XSSFDataValidationConstraint) helper.createExplicitListConstraint(myarray);
CellRangeAddressList addressList = new CellRangeAddressList(3, 10, 5, 5);
XSSFDataValidation validation = (XSSFDataValidation) helper.createValidation(dvConstraint, addressList);
validation.setEmptyCellAllowed(false);
validation.setShowErrorBox(true);
sheet.addValidationData(validation);
错误
对于某些内容来说,它运行良好。但是,如果数组myarray
包含一些值,如STUDENT
或HOUSE, DEF
,则在打开Excel时出错:
We found a problem with some content in 'file.xlsx'. Do you want us to try to recover as much as we can? If you trust the source of the workbook, Click Yes.
其他信息
my array
是List<WebElement>
。我得到这份名单是因为:
Select select = new Select(By.xpath("myxpath"));
List<WebElement> opt = select.getOptions();
myarray = new String[opt.size()];
for(int i = 0; i < opt.size(); i++)
myarray[i] = opt.get(i).getText();
但我认为这段代码不是问题所在,因为我能够获得所有与文本相关的选项。当我把这个内容放到createExplicitListConstraint
中时,奇怪的事情发生了
当我打印myarray
的内容时,所有值都正确地显示在控制台中
# 1 楼答案
显式数据验证列表的公式长度有限制。最大长度为255。如果显式数据验证列表的公式长度超过255,则
Excel
在打开时失败,出现错误We found a problem with some content in ...
。如果你点击Yes
,Excel
告诉你它已经修复了/xl/worksheet/sheet*.xml
部分。之后,数据验证列表不起作用复制示例:
唯一的解决方案是将列表项放在单独的表格的单元格中,然后使用
createFormulaListConstraint
而不是createExplicitListConstraint
。我在这里展示了:Apache POI Double Values in ComboBox