我有一个要求,我需要将数据验证添加到整个列而不是特定的单元格。我浏览了 Apache poi 的文档并找到了下面的示例
HSSFWorkbook workbook = new HSSFWorkbook();
HSSFSheet sheet = workbook.createSheet("Data Validation");
CellRangeAddressList addressList = new CellRangeAddressList(0, 0, 0, 0);
DVConstraint dvConstraint = DVConstraint.createExplicitListConstraint(
new String[]{"10", "20", "30"});
DataValidation dataValidation = new HSSFDataValidation
(addressList, dvConstraint);
dataValidation.setSuppressDropDownArrow(false);
sheet.addValidationData(dataValidation);
但是上面的示例为特定单元格创建了一个下拉数据验证。在本例中为第 0 行,第 0 列。列中的其余单元格没有验证。但在实际的Excel文件中我们可以做到这一点,所以它应该是可能的。我尝试并搜索了很多,但无法找到解决方案。请帮忙..
另一种对整列进行验证的方法,您还可以对两个行参数使用 -1,例如:
CellRangeAddressList columnRange = new CellRangeAddressList(-1, -1, columnIndex, columnIndex);
在 POI 3.16 中对此进行了测试
Chetan构造函数CellRangeAddressList的所有四个参数如下
CellRangeAddressList(index_of_starting_row, index_of_ending_row, index_of_starting_column,index_of_ending_column);
所以例如。如果有 10 行 5 列,并且如果您想在整个第二列中的所有行中的第二列中添加下拉列表,则使用以下代码作为单元格地址
CellRangeAddressList addressList = new CellRangeAddressList(0,9,1,1);
根据您的代码,如果您通过替换代码添加上述代码行,则会在整个第二列中添加值 10,20,30 的下拉菜单。
希望这能澄清这个概念,并且您会得到想要的结果。
如果您需要跳过顶行,也可以使用此方法:
int lastRow = workbook.getSpreadsheetVersion().getLastRowIndex();
CellRangeAddressList cellRangeAddressList = new CellRangeAddressList(
2, // skipping top rows
lastRow,
4, // firstCol
4 // lastCol
);
请参阅此答案了解详细信息。