POI 数据验证

从3.8开始,POI使用.xls和.xlsx格式处理数据校验略有不同之处。
1)针对一个或多个预定义值检查用户输入到单元格的值
以下代码将限制用户能输入到单元格A1的值是三个整数值(10、20、30)之一:
    Workbook workbook = new XSSFWorkbook();  // 或者new HSSFWorkbook
    Sheet sheet = workbook.createSheet("Data Validation");
    // 数据验证帮助类
    DataValidationHelper dvHelper = sheet.getDataValidationHelper();
    // 创建一个期望列表约束,需要期望值的数组参数
    DataValidationConstraint dvConstraint = dvHelper.createExplicitListConstraint(new String[]{"13", "23", "33"});
    // 单元格数组引用,这是单元格A1(第一行索引、最后一行索引、第一列索引、最后一列索引)
    CellRangeAddressList addressList = new CellRangeAddressList(0, 0, 0, 0);
    // 使用数据验证约束和单元格引用创建数据验证
    DataValidation validation = dvHelper.createValidation(dvConstraint, addressList);
    // 此处2003和2007格式的设置略有不同
    if (validation instanceof XSSFDataValidation) {
        validation.setSuppressDropDownArrow(false);
        validation.setShowErrorBox(true);
    } else {
        validation.setSuppressDropDownArrow(true);
    }
    sheet.addValidationData(validation);

2)下载列表
该代码将同样的事情,但提供用户从下拉列表中选择一个值。
    Workbook workbook = new XSSFWorkbook();  // or new HSSFWorkbook
    Sheet sheet = workbook.createSheet("Data Validation");
    DataValidationHelper dvHelper = sheet.getDataValidationHelper();
    DataValidationConstraint dvConstraint = dvHelper.createExplicitListConstraint(new String[]{"13", "23", "33"});
    CellRangeAddressList addressList = new CellRangeAddressList(0, 0, 0, 0);            
    DataValidation validation = dvHelper.createValidation(dvConstraint, addressList);
    if (validation instanceof XSSFDataValidation) {
        validation.setSuppressDropDownArrow(true);
        validation.setShowErrorBox(true);
    } else {
        validation.setSuppressDropDownArrow(false);
    }
    sheet.addValidationData(validation);

3)定制错误信息
创建消息框显示用户输入的值是无效的。
    // 设置错误样式,有效值STOP、WARNING、INFO
    validation.setErrorStyle(DataValidation.ErrorStyle.STOP);
    // 设置错误提示框的标题和消息
    validation.createErrorBox("Box Title", "Message Text");

4)提示
当包含数据验证的单元格获得焦点时用户将看到一个提示。
    validation.createPromptBox("Title", "Message Text");
    validation.setShowPromptBox(true);

5)更高级的数据验证
    与dvHelper.createExplicitListConstraint类似DataValidationHelper类还定义了一系列的createXxxConstraint方法来实现各种Excel的验证功能。

你可能感兴趣的:(POI 数据验证)