“有点东西”大佬发的这个样例是写文件的时候设置单元格公式,我这边的场景是读文件的时候获取单元格公式:
【背景】:java代码解析上传的excel文件时,要记录每个单元格设置的公式信息。
【demo】:
// 根据行列号定位到单元格,调用getFormula方法获取单元格设置的公式,
String formula = formsheet.getRange(rnum, cnum).getFormula();
// 使用FormulaSyntaxTree获取语法树
FormulaSyntaxTree syntaxTree = FormulaSyntaxTree.Parse(formula);
List<SyntaxNode> childs = syntaxTree.getRoot().getChildren();
// 遍历语法树
for (int idx = 0; idx < childs.size(); idx++) {
SyntaxNode node = childs.get(idx);
List<SyntaxNode> chilrenList = node.getChildren();
if (CollectionUtils.isEmpty(chilrenList)) {
// 获取语法树中的值,到了这里,如果公式是SUM(C1,C6),语法树里是可以获得C1、C6这样解析过后的结果,但如果是SUM(C1:C6),解析出来的仍然是C1:C6,不是C1、C6
String nodeStr = node.toString()
}
}
【问题描述】
如果公式是SUM(C1,C6),语法树里是可以获得C1、C6这样解析过后的结果,但如果是SUM(C1:C6),解析出来的仍然是C1:C6,不是C1、C6 |