如何在java中使用apache poi向Excel工作表的整列添加数据验证?

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

我有一个要求,我需要将数据验证添加到整个列而不是特定的单元格。我浏览了 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文件中我们可以做到这一点,所以它应该是可能的。我尝试并搜索了很多,但无法找到解决方案。请帮忙..

java excel apache-poi validation
3个回答
12
投票

另一种对整列进行验证的方法,您还可以对两个行参数使用 -1,例如:

CellRangeAddressList columnRange = new CellRangeAddressList(-1, -1, columnIndex, columnIndex);

在 POI 3.16 中对此进行了测试


6
投票

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 的下拉菜单。

希望这能澄清这个概念,并且您会得到想要的结果。


0
投票

如果您需要跳过顶行,也可以使用此方法:

int lastRow = workbook.getSpreadsheetVersion().getLastRowIndex();

CellRangeAddressList cellRangeAddressList = new CellRangeAddressList(
    2, // skipping top rows
    lastRow, 
    4, // firstCol 
    4  // lastCol
);

请参阅此答案了解详细信息。

© www.soinside.com 2019 - 2024. All rights reserved.