如何使用 apache poi 根据另一个下拉单元格选择的值禁用单元格?
我必须根据德国或英国等国家(B 列)的下拉选择来禁用城市列单元格(F 和 G)。如果我从国家/地区下拉列表(B 列)中选择了印度、中国和美国,那么所有列都可以选择。
我如何在 java 中使用 apache poi 实现这一目标?
提前致谢。
public void downloadSampleExcel() {
try
{
DataValidation dataValidation = null;
DataValidationConstraint constraint = null;
DataValidationHelper validationHelper = null;
XSSFWorkbook wb = new XSSFWorkbook();
XSSFSheet sheet1=(XSSFSheet) wb.createSheet("sheet1");
sheet1.createRow(0).createCell(0).setCellValue("Phone Number");
sheet1.getRow(0).createCell(1).setCellValue("Country");
sheet1.getRow(0).createCell(2).setCellValue("Cities In India");
sheet1.getRow(0).createCell(3).setCellValue("Cities In China");
sheet1.getRow(0).createCell(4).setCellValue("Cities In America");
sheet1.getRow(0).createCell(5).setCellValue("Cities In Germany");
sheet1.getRow(0).createCell(6).setCellValue("Cities In England");
validationHelper=new XSSFDataValidationHelper(sheet1);
CellRangeAddressList addressList = new CellRangeAddressList(1,99,1,1);
constraint =validationHelper.createExplicitListConstraint(new String[]{ "India","China","America","Germany","England" });
dataValidation = validationHelper.createValidation(constraint, addressList);
dataValidation.setSuppressDropDownArrow(true);
dataValidation.setErrorStyle(DataValidation.ErrorStyle.STOP);
dataValidation.createErrorBox("Error", "Please select value only from dropdown");
dataValidation.setShowErrorBox(true);
sheet1.addValidationData(dataValidation);
addressList = new CellRangeAddressList(1,99,2,2);
constraint =validationHelper.createExplicitListConstraint(new String[]{ "Maharashtra", "Delhi", "Kolkatta" });
dataValidation = validationHelper.createValidation(constraint, addressList);
dataValidation.setSuppressDropDownArrow(true);
dataValidation.setErrorStyle(DataValidation.ErrorStyle.STOP);
dataValidation.createErrorBox("Error", "Please select value only from dropdown");
dataValidation.setShowErrorBox(true);
sheet1.addValidationData(dataValidation);
addressList = new CellRangeAddressList(1,99,3,3);
constraint = validationHelper.createExplicitListConstraint(new String[]{"Beijing", "Shanghai"});
dataValidation = validationHelper.createValidation(constraint, addressList);
dataValidation.setSuppressDropDownArrow(true);
dataValidation.setErrorStyle(DataValidation.ErrorStyle.STOP);
dataValidation.createErrorBox("Error", "Please select value only from dropdown");
dataValidation.setShowErrorBox(true);
sheet1.addValidationData(dataValidation);
addressList = new CellRangeAddressList(1,99,4,4);
constraint = validationHelper.createExplicitListConstraint(new String[]{"Chicago", "New York"});
dataValidation = validationHelper.createValidation(constraint, addressList);
dataValidation.setSuppressDropDownArrow(true);
dataValidation.setErrorStyle(DataValidation.ErrorStyle.STOP);
dataValidation.createErrorBox("Error", "Please select value only from dropdown");
dataValidation.setShowErrorBox(true);
sheet1.addValidationData(dataValidation);
addressList = new CellRangeAddressList(1,99,5,5);
constraint = validationHelper.createExplicitListConstraint(new String[]{"Berlin", "Hamburg"});
dataValidation = validationHelper.createValidation(constraint, addressList);
dataValidation.setSuppressDropDownArrow(true);
dataValidation.setErrorStyle(DataValidation.ErrorStyle.STOP);
dataValidation.createErrorBox("Error", "Please select value only from dropdown");
dataValidation.setShowErrorBox(true);
sheet1.addValidationData(dataValidation);
addressList = new CellRangeAddressList(1,99,6,6);
constraint = validationHelper.createExplicitListConstraint(new String[]{"London", "Liverpool"});
dataValidation = validationHelper.createValidation(constraint, addressList);
dataValidation.setSuppressDropDownArrow(true);
dataValidation.setErrorStyle(DataValidation.ErrorStyle.STOP);
dataValidation.createErrorBox("Error", "Please select value only from dropdown");
dataValidation.setShowErrorBox(true);
sheet1.addValidationData(dataValidation);
FileOutputStream fileOut = new FileOutputStream("D:\\Projects\\CountriesDropdown.xlsx");
wb.write(fileOut);
fileOut.close();
wb.close();
}
catch (Exception e) {
// TODO: handle exception
logger.debug("Exception :"+e.getMessage());
e.printStackTrace();
}
}