包含&符号的公式中的词法错误

时间:2013-05-14 02:21:46

标签: java jexcelapi

我正在尝试在我的电子表格中添加一个公式,其中包含引用单元格的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不知道如何正确解析&符号吗?我的情况有解决方法吗?

1 个答案:

答案 0 :(得分:0)

如果使用连接(a,b)而不是&amp; b,则可以获得所需的效果。上面的示例只处理单级连接,如&amp;和&amp;和&amp ;;如果你想嵌套ie(和&amp; and)&amp;并且你将不得不搞乱正则表达式 -

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));

}