我正在尝试生成一个带有一些验证的 excel 文件,我已经阅读了 poi 开发指南 以实现它。在实施过程中,我遇到了一个异常( String literals in formulas can't be bigger than 255 characters ASCII
)。 POI 将所有下拉选项连接成“0”分隔字符串并检查其长度并给我异常。 :(
我正在使用最新版本的 POI 3.8 beta 5。
我的代码是:
try {
HSSFWorkbook wb = new HSSFWorkbook();
HSSFSheet sheet = wb.createSheet("new sheet");
HSSFRow row = sheet.createRow((short) 0);
//CellRangeAddressList from org.apache.poi.ss.util package
CellRangeAddressList addressList = new CellRangeAddressList(0, 0, 0, 0);
DVConstraint dvConstraint = DVConstraint.createExplicitListConstraint(getCountries());
DataValidation dataValidation = new HSSFDataValidation(addressList, dvConstraint);
dataValidation.setSuppressDropDownArrow(false);
sheet.addValidationData(dataValidation);
FileOutputStream fileOut = new FileOutputStream("c:\\test.xls");
wb.write(fileOut);
fileOut.close();
} catch (IOException e) {
e.printStackTrace();
}
之后我尝试使用 XSSFWorkBook 使用此代码:
XSSFWorkbook wb = new XSSFWorkbook();
XSSFSheet sheet = wb.createSheet("new sheet");
DataValidationHelper validationHelper = new XSSFDataValidationHelper(sheet);
DataValidationConstraint constraint = validationHelper.createExplicitListConstraint(getCountries());
CellRangeAddressList addressList = new CellRangeAddressList(0, 0, 0, 0);
DataValidation dataValidation = validationHelper.createValidation(constraint, addressList);
dataValidation.setErrorStyle(DataValidation.ErrorStyle.STOP);
dataValidation.setSuppressDropDownArrow(true);
sheet.addValidationData(dataValidation);
FileOutputStream fileOut = new FileOutputStream("c:\\test.xlsx");
不幸的是,这样的结果没有成功,它是一个单元格中逗号分隔的长字符串:
但是在 excel 中手动,我可以用这个长长的国家列表创建下拉单元格。
有没有办法生成长字符串的下拉列表,或者 API 不支持?
原文由 Jama A. 发布,翻译遵循 CC BY-SA 4.0 许可协议
我明白了,Excel本身不允许输入超过255个字符的验证范围字符串,这不是POI限制。现在我正在使用 命名范围和命名单元格,它对我来说工作正常。所以我不得不将我的验证范围标记放在另一个工作表中(隐藏)并且我从我的真实工作表中引用了所需的单元格范围。这是我的工作代码: