0

正如标题所说:当我尝试使用 XSSFDataValidationHelper 的方法 createFormulaListConstraint("...") 添加 DataValidationConstraint 时,根据我尝试在 MS Excel 中打开它时的弹出窗口,excel 文件的内容不正确。

当我使用 excel 创建数据验证时,此公式按预期工作:

=OFFSET(Sites!$A$2;0;0;COUNTA(Sites!$A:$A)- 1;1)

现在我正在尝试使用 apache poi 3.8 做同样的事情:

XSSFDataValidationConstraint siteNamesConstraint = (XSSFDataValidationConstraint) dvHelper.createFormulaListConstraint("=OFFSET('Sites'!$A$2;0;0;COUNTA('Sites'!$A:$A)- 1;1)");

打开excel文件时出现错误。

我也尝试过其他公式:

  • =OFFSET('Sites'!$A$2;0;0;COUNTA('Sites'!$A:$A)- 1;1) (用''围绕工作表名称,用'=')
  • OFFSET('Sites'!$A$2;0;0;COUNTA('Sites'!$A:$A)- 1;1) (用''围绕工作表名称,没有'=')
  • =OFFSET(Sites!$A$2;0;0;COUNTA(Sites!$A:$A)- 1;1) (名称周围没有'',有'=')
  • OFFSET(Sites!$A$2;0;0;COUNTA(Sites!$A:$A)- 1;1) (名称周围没有 '',没有 '=')

这些似乎都不正确。

在此之前我所拥有的只是“站点”!$A$2:$A$100 这很有效,但它在结果中包含了空白值,这不是我需要的。

我在这里做错了什么还是有另一种方法不在列表中包含空白值?

4

1 回答 1

4

叹息,我在发布这个问题 5 分钟后才找到解决方案。

在excel中输入公式时“;” 在函数中用作分隔符,但在 POI 中分隔符是“,”。

我在尝试以下代码时发现了这一点:

Name namedRange = wb.createName();
namedRange.setNameName("sites");
namedRange.setRefersToFormula("OFFSET('Sites'!$A$2,0,0,COUNTA('Sites'!$A:$A)- 1,1)");

然后引用它:

(XSSFDataValidationConstraint) dvHelper.createFormulaListConstraint("sites");

'Name' 类的 setRefersToFormula 提供了更好的错误处理并显示了我的公式有什么问题(“,”预期但“;”找到)。

于 2013-02-21T12:08:02.400 回答