当前位置: 首页 > 知识库问答 >
问题:

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

林铭
2023-03-14

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

共有3个答案

凌炜
2023-03-14

我试图添加下面的数据验证,但1-3正在Excel下拉列表中转换为3-Jan。有办法解决这个问题吗?

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

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

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

雍俊远
2023-03-14

Chetan构造函数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);

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

希望这将明确概念,你会得到渴望的结果。

邹英发
2023-03-14

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

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

在POI 3.16中测试过这个

 类似资料:
  • 我试图使用apache POI、使用primefaces和java在现有的excel工作簿中创建一个新的工作表,但是到目前为止还没有成功。谁能告诉我这是怎么做的吗?我可以做单张 下面的代码是我为在一个xls文件中创建多个工作表而编写的,我给出的条件是它没有大于65535的of行创建新工作表并迭代它,但它显示错误 警告:允许范围(0..65535)之外的无效行号(65536)java.lang.Il

  • 本文向大家介绍Python pandas如何向excel添加数据,包括了Python pandas如何向excel添加数据的使用技巧和注意事项,需要的朋友参考一下 pandas读取、写入csv数据非常方便,但是有时希望通过excel画个简单的图表看一下数据质量、变化趋势并保存,这时候csv格式的数据就略显不便,因此尝试直接将数据写入excel文件。 pandas可以写入一个或者工作簿,两种方法介绍

  • 刚开始使用熊猫和python。 我有一个工作表,我已经读到一个数据框和应用的正向填充(ffill)方法。 然后我想创建一个包含两个工作表的excel文档。 在应用FFIL方法之前,一个工作表的数据帧中包含数据,而下一个工作表的数据帧应用了FFIL方法。 最终,我打算为数据框的某一列中的每个唯一数据实例创建一个工作表。 然后我想应用一些vba格式的结果-但我不确定哪个dll或插件或东西,我需要调用e

  • 我在excel文件中的Drools规则desicion表中有一个操作,这在java中调用了一个方法。此方法需要2个参数来在此方法变量中添加数据,但会生成错误。 这是java中的方法 这是excel文件中Drools决策表中的规则 报价产品。添加新产品(“1美元”,“2美元”); 选项是2个字符串,格式如下: "字符串1","字符串2" 创建KieBase时出错[Message[id=1, leve

  • 我有一个Java方法writeToExcel(String sheetName,Map),它在一个新的excel文件中创建一个名为'sheet name'的新工作表,并将地图数据写入其中。当我使用不同的sheetName参数多次调用该方法时,现有的工作表将被上次调用的工作表替换。我希望每次使用不同的sheetName参数调用该方法时,都在同一个excel文件中创建新的工作表,而不会丢失现有的工作表