打开excel时,apache POI createFormulaListConstraint导致“不可读的内容”

时间:2013-02-21 11:59:34

标签: java apache apache-poi

与标题一样:当我尝试使用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('网站'!$ A $ 2; 0; 0; COUNTA('网站'!$ A:$ A) - 1; 1)(工作表名称周围带'=')< / LI>
  • OFFSET('网站'!$ A $ 2; 0; 0; COUNTA('网站'!$ A:$ A) - 1; 1)(工作表名称周围没有'=')
  • = OFFSET(网站!$ A $ 2; 0; 0; COUNTA(网站!$ A:$ A) - 1; 1)(名称周围没有','=')
  • OFFSET(网站!$ A $ 2; 0; 0; COUNTA(网站!$ A:$ A) - 1; 1)(名称周围没有','=')

这些似乎都不正确。

之前我所拥有的只是'网站'!$ A $ 2:$ A $ 100这个有效,但它包含了结果中的空白值,这不是我需要的。

我在这里做错了还是有其他方法不在列表中包含空白值?

1 个答案:

答案 0 :(得分: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");
类的setRefersToFormula提供了更好的错误处理,并显示了我的公式出错(“,”预期但是“;”找到了。)