如何使用 apache poi 根据另一个下拉单元格选择的值禁用单元格?

问题描述 投票:0回答:0

如何使用 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(); 
    }
    
}

java excel spring-boot apache-poi conditional-formatting
© www.soinside.com 2019 - 2024. All rights reserved.