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

时间:2015-01-27 15:17:30

标签: java excel apache-poi validation

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

3 个答案:

答案 0 :(得分:6)

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

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

在POI 3.16

中测试过

答案 1 :(得分:2)

切断构造函数CellRangeAddressList的所有四个参数,如下所示

CellRangeAddressList(index_of_starting_row, index_of_ending_row, index_of_starting_column,index_of_ending_column);

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

CellRangeAddressList addressList = new CellRangeAddressList(0,9,1,1);

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

希望这将清除这个概念,你会得到渴望的结果。

答案 2 :(得分:0)

我正在尝试在数据验证下方添加内容,但1-3在excel下拉菜单中已转换为3月3日。有办法解决这个问题吗?

DVConstraint dvConstraint = DVConstraint.createExplicitListConstraint(新字符串[] {“ 1-3”,“ 2”,“ 3”});

注意-在添加数据验证之前,我在这里的第一个答案中使用代码-How to set a cell format to Text将第二列的数据类型设置为文本。否则,在excel单元格中输入1-3时,它会自动转换为3月1日。

此问题解决了直接在excel单元中输入1-3的问题,但在下拉菜单中,我仍然看到3-Jan。