【问题标题】:How to add Data validation to entire column of an excel sheet using apache poi in java?java - 如何在java中使用apache poi将数据验证添加到excel工作表的整个列?
【发布时间】:2020-07-01 15:10:05
【问题描述】:

我有一个要求,我需要将数据验证添加到整个列而不是特定单元格。我浏览了 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 行到第 0 行(很多)会发生什么?
  • 如果您对很多行号执行此操作,那么它将对所有提到的行应用数据验证,但之后不会

标签: java excel apache-poi validation


【解决方案1】:

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

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

在 POI 3.16 中对此进行了测试

【讨论】:

  • 确认 POI 3.17
【解决方案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。

希望这将清除概念,并且您会得到期望的结果。

【讨论】:

  • 这将仅在 10 行上添加验证。虽然我可能只有十行的数据,但我想将验证添加到整个列
  • @Chetan 我刚刚给出了一个例子。如果您想在整个列中应用,则传递 1048576 而不是 10(即第二个参数),因为总共没有。 MS Excel 2007 中的行数为 1,048,576,如果是 Ms Excel 2003,则将 65536 作为总数传递。 Excel 2003 中的行数为 65,536
  • 最大行数解决了目的,您指出的值确实有很大帮助
  • @Chetan 听起来不错
【解决方案3】:

我正在尝试添加以下数据验证,但 1-3 在 Excel 下拉菜单中被转换为 3-Jan。有没有办法解决这个问题?

DVConstraint dvConstraint = DVConstraint.createExplicitListConstraint(new String[]{"1-3", "2", "3"});

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

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

【讨论】:

    猜你喜欢
    • 2016-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多