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