1

我正在尝试将一个公式添加到我的电子表格中,其中包含一个引用单元格的 SUMIF。这是我要添加的公式的代码:

addFormula("(100 * " + dRangeCell + " / 256) * (SUMIF(B" + (dip.start+1) + ":B" + (dip.end+1) + ",\"<\"&" + dbThresholdCell + ")) / " + profile.getImageWidth(), 
            dipAreaPercentageCol, row, sheet, highlightedFormat);

重要的部分是 SUMIF 中的条件,如果值小于另一个单元格中的值,我将尝试求和。

当代码运行时,我收到此错误:

Warning:  Lexical error:   (100 * D18 / 256) * (SUMIF(B1:B2,"<"&D21)) / 332 at char  36 when parsing formula (100 * D18 / 256) * (SUMIF(B1:B2,"<"&D21)) / 332 in cell Profile!N24

它抱怨的字符是 & 符号。但是,当我将确切的公式粘贴到 Excel 中的电子表格中时,它可以完美运行。

JExcel 不知道如何正确解析 & 符号吗?我的情况有解决方法吗?

4

1 回答 1

0

如果您使用 concatenate(a,b) 而不是 a&b ,您可以获得所需的效果。上面的例子将只处理像 &and&and& 这样的单级连接,如果你想要嵌套的 ie (and&and)& 并且你将不得不使用正则表达式 -</p>

if (colElement.attributeValue("type").equals(CellType.STRING_FORMULA.toString())) {
  WritableCellFormat wcf = new WritableCellFormat();
  Pattern pattern = Pattern.compile("^([^&]+)&(.*)$");
  for (Matcher m = pattern.matcher(t); m.matches(); m=pattern.matcher(t)) {
    t = "CONCATENATE(" + m.group(1) +  "," + m.group(2) + ")";
  }
  sheet.addCell(new jxl.write.Formula(x, y, t));

}
于 2014-04-09T08:32:36.343 回答