如何使用 java 中的 apache poi 将数据验证添加到 excel sheet 的整个列?
How to add Data validation to entire column of an excel sheet using apache poi in java?
我有一个要求,我需要在整个列而不是特定单元格中添加数据验证。我浏览了 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 文件中我们可以做到,所以它应该是可能的。我尝试并搜索了很多但无法找到解决方案。请帮忙..
把构造函数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(new String[]{"1-3", "2", "3"});
注意 - 在添加数据验证之前,我在此处的第一个答案中使用代码 - 将第二列的数据类型设置为文本。否则,在 excel 单元格中输入 1-3 时,它会自动转换为 3-Jan。
这解决了直接在 excel 单元格中输入 1-3 的问题,但在下拉列表中,我仍然看到 3-Jan。
我有一个要求,我需要在整个列而不是特定单元格中添加数据验证。我浏览了 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 文件中我们可以做到,所以它应该是可能的。我尝试并搜索了很多但无法找到解决方案。请帮忙..
把构造函数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(new String[]{"1-3", "2", "3"});
注意 - 在添加数据验证之前,我在此处的第一个答案中使用代码 -
这解决了直接在 excel 单元格中输入 1-3 的问题,但在下拉列表中,我仍然看到 3-Jan。