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

Che*_*tan 5 java validation excel apache-poi

我有一个要求我需要在整个列而不是特定单元格中添加数据验证.我浏览了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);
Run Code Online (Sandbox Code Playgroud)

但是上面的示例为特定单元格创建了下拉数据验证.在这种情况下,第0行,第0列.列中的其余单元格没有验证.但是在实际的excel文件中我们可以这样做,所以它应该是可能的.我经常尝试和搜索,但无法找到解决方案.请帮忙..

Tur*_*smo 6

另一种获取整个列验证的方法,您也可以使用-1作为两个行参数,例如:

CellRangeAddressList columnRange = new CellRangeAddressList(-1, -1, columnIndex, columnIndex);
Run Code Online (Sandbox Code Playgroud)

在POI 3.16中测试过


Nav*_*een 5

把构造函数CellRangeAddressList的四个参数全部扯掉如下

CellRangeAddressList(index_of_starting_row, index_of_ending_row, index_of_starting_column,index_of_ending_column);
Run Code Online (Sandbox Code Playgroud)

所以例如。如果有 10 行和 5 列,并且如果您想在整个第二列中的所有行中添加第二列中的下拉列表,则使用以下代码作为单元格地址

CellRangeAddressList addressList = new CellRangeAddressList(0,9,1,1);
Run Code Online (Sandbox Code Playgroud)

根据您的代码,如果您通过替换代码添加上述代码行,这将在整个第二列中添加值 10,20,30 的下拉列表。

希望这会清除概念,你会得到想要的结果。

  • @Chetan 我刚刚给出了一个例子。如果您想在整个列中应用,则传递 1048576 而不是 10(即第二个参数),因为总共没有。MS Excel 2007 中的行数为 1,048,576,如果是 Ms Excel 2003,则通过 65536 作为总数。Excel 2003 中的行数为 65,536 (2认同)