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