首先,我发现这不是Apache
POI错误。这是Excel的限制。这是链接,
“在数据验证下拉列表中显示的项目数有限制:
该列表可以显示以显示工作表上的列表中的32,767个项目。如果您在数据验证对话框(定界列表)中键入项目,则限制为256个字符,包括分隔符。”
显然,该行明确输入了256个以上的字符。
constraint =validationHelper.createExplicitListConstraint(countryName);
其次,这是我的解决方案。它工作正常。
public class Test { public static void main(String[] args) throws IOException{ TreeSet<String> temp_rxGroups = new TreeSet<String>(); for (int i = 0; i < 302; i++) { temp_rxGroups.add("" + i); } String[] countryName = temp_rxGroups.toArray(new String[temp_rxGroups.size()]); XSSFWorkbook workbook = new XSSFWorkbook(); XSSFSheet realSheet = workbook.createSheet("realSheet"); XSSFSheet hidden = workbook.createSheet("hidden"); for (int i = 0, length= countryName.length; i < length; i++) { String name = countryName[i]; XSSFRow row = hidden.createRow(i); XSSFCell cell = row.createCell(0); cell.setCellValue(name); } DataValidation dataValidation = null; DataValidationConstraint constraint = null; DataValidationHelper validationHelper = null; validationHelper=new XSSFDataValidationHelper(realSheet); CellRangeAddressList addressList = new CellRangeAddressList(0,0,0,0); constraint =validationHelper.createFormulaListConstraint("hidden!$A$1:$A$" + countryName.length); dataValidation = validationHelper.createvalidation(constraint, addressList); dataValidation.setSuppressDropDownArrow(true); workbook.setSheetHidden(1, true); realSheet.addValidationData(dataValidation); FileOutputStream stream = new FileOutputStream("c:\test.xlsx"); workbook.write(stream); stream.close(); }}


