Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在java中使用ApachePOI向excel工作表的整个列添加数据验证?_Java_Excel_Apache Poi_Validation - Fatal编程技术网

如何在java中使用ApachePOI向excel工作表的整个列添加数据验证?

如何在java中使用ApachePOI向excel工作表的整个列添加数据验证?,java,excel,apache-poi,validation,Java,Excel,Apache Poi,Validation,我需要将数据验证添加到整个列中,而不是特定的单元格中。我浏览了ApachePOI的文档,找到了下面的示例 HSSFWorkbook workbook = new HSSFWorkbook(); HSSFSheet sheet = workbook.createSheet("Data Validation"); CellRangeAddressList addressList = new CellRangeAddressList(0, 0, 0, 0); DVConstraint dvConstr

我需要将数据验证添加到整个列中,而不是特定的单元格中。我浏览了ApachePOI的文档,找到了下面的示例

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文件中,我们可以这样做,所以这应该是可能的。我试了很多次,但没有找到解决办法。请帮助..

检查构造函数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);
根据您的代码,如果您通过替换代码来添加上述代码行,则这将在整个第2列中添加值为10、20、30的下拉列表


希望这将明确概念,您将获得期望的结果。

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

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

在POI 3.16中对此进行了测试,我试图添加以下数据验证,但1-3在excel下拉列表中转换为3-Jan。有办法解决这个问题吗

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

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


这解决了直接在excel单元格中输入1-3的问题,但在下拉列表中,我仍然看到1月3日。

如果设置一个从第0行到第2行(相当多)的单元格范围,会发生什么?如果设置了相当多的行号,则会对所有提到的行应用数据验证,但在这之后,它将不进行验证。这将只在10行上添加验证。虽然我可能只有十行的数据,但我想将验证添加到整个数据库中column@Chetan我刚刚给出了一个示例。如果您想在整个列中应用,则通过1048576而不是10(即第二个参数)由于MS Excel 2007中的总行数为1048576,如果是MS Excel 2003,则通过65536,因为Excel 2003中的总行数为65536。最大行数解决了目的,并且您所指示的值确实有助于lot@Chetan这听起来很适合POI 3.17