如果要对单元格进行下拉校验,POI中提供了两种方法:
1. 必须从下拉中选择
DataValidationHelper helper = sheet.getDataValidationHelper();
String optionsArray [] = new String[cellValidation.getOptions().size()];
cellValidation.getOptions().toArray(optionsArray) ;
DataValidationConstraint constraint = helper.createExplicitListConstraint( optionsArray);
CellRangeAddressList cellAddressList = new CellRangeAddressList(cellValidation.getStartRow(),
cellValidation.getEndRow(),cellValidation.getStartCol(),cellValidation.getEndCol());
DataValidation validation = helper.createValidation(constraint,cellAddressList);
if(validation instanceof HSSFDataValidation){
validation.setSuppressDropDownArrow(false);
}else{
validation.setSuppressDropDownArrow(true);
validation.setShowErrorBox(true);
}
sheet.addValidationData(validation) ;
2. 选择下拉或者手动输入
String hidddenSheetName = "hidden" + sheetIndex ;
Sheet hidden = workbook.createSheet(hidddenSheetName );
Cell cell = null;
List<String> options = cellValidation.getOptions() ;
int i = 0 ;
for ( ; i < options.size() ; i ++ ) {
Row row = hidden.createRow(i);
cell = row.createCell(0);
cell.setCellValue(options.get(i));
}
Row row = hidden.createRow(i);
row.createCell(i);
Name namedCell = workbook.createName();
namedCell.setNameName(hidddenSheetName);
namedCell.setRefersToFormula(hidddenSheetName + "!$A$1:$A$" + (i+1));
workbook.setSheetHidden(workbook.getSheetIndex(hidden), true);
DataValidationConstraint constraint = null;
CellRangeAddressList addressList = new CellRangeAddressList(
cellValidation.getStartRow(), cellValidation.getEndRow(),
cellValidation.getStartCol(), cellValidation.getEndCol());
DataValidation validation = null;
if (sheet instanceof XSSFSheet || sheet instanceof SXSSFSheet) {
DataValidationHelper dvHelper = sheet.getDataValidationHelper();
constraint = dvHelper.createFormulaListConstraint(hidddenSheetName);
validation = dvHelper.createValidation(constraint, addressList);
} else {
constraint = DVConstraint.createFormulaListConstraint(hidddenSheetName);
validation = new HSSFDataValidation(addressList, constraint);
}
if (validation instanceof HSSFDataValidation ) {
validation .setSuppressDropDownArrow(false);
} else {
validation .setSuppressDropDownArrow(true);
validation .setShowErrorBox(true);
}
sheet.addValidationData(validation);