繁体   English   中英

如何在java中使用apache poi向excel表的整列添加数据验证?

[英]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 文件中我们可以做到,所以它应该是可能的。 我尝试并搜索了很多,但无法找到解决方案。 请帮忙..

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

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

在 POI 3.16 中对此进行了测试

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

CellRangeAddressList(index_of_starting_row, index_of_ending_row, index_of_starting_column,index_of_ending_column);

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

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

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

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

我正在尝试添加以下数据验证,但 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。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM