如何通过Apache POI判断Excel单元格是否存在列表类型数据验证
判断Excel单元格是否带列表类型数据验证(Apache POI)
可以实现,但Cell对象本身没有直接获取数据验证的方法——数据验证规则是绑定在工作表的指定区域上,而非单个单元格,所以需要从Sheet层面遍历所有数据验证规则,再判断目标单元格是否在规则的作用范围内,同时验证规则类型是否为列表。
实现步骤与代码示例
import org.apache.poi.ss.usermodel.*; import org.apache.poi.ss.util.CellRangeAddress; import org.apache.poi.ss.util.CellRangeAddressList; public boolean hasListDataValidation(Cell cell) { if (cell == null) { return false; } Sheet sheet = cell.getSheet(); // 获取工作表中所有数据验证规则 List<DataValidation> dataValidations = sheet.getDataValidations(); for (DataValidation dv : dataValidations) { CellRangeAddressList regions = dv.getRegions(); // 遍历当前规则的所有作用区域 for (int i = 0; i < regions.getNumberOfRanges(); i++) { CellRangeAddress range = regions.getCellRangeAddress(i); // 检查目标单元格是否在当前区域内 if (range.isInRange(cell.getRowIndex(), cell.getColumnIndex())) { // 判断是否为列表类型的数据验证 DataValidationConstraint constraint = dv.getValidationConstraint(); if (constraint.getValidationType() == DataValidationConstraint.ValidationType.LIST) { return true; } } } } return false; }
关键说明
- 从Sheet获取规则:所有数据验证规则都存储在Sheet的规则集合中,通过
sheet.getDataValidations()可获取全部规则 - 区域匹配:用
CellRangeAddress.isInRange(row, col)判断目标单元格是否落在当前规则的作用区域内 - 类型判断:通过
DataValidationConstraint.getValidationType()获取规则类型,ValidationType.LIST即为列表型数据验证
内容的提问来源于stack exchange,提问作者Andrei Mihuț
相关产品推荐
相关产品推荐

