我想从某个单元格开始计算Excel电子表格的切片(http://en.wikipedia.org/wiki/Program_slicing)。这意味着我需要找出单元格中引用的单元格,并递归地跟随这些引用。到目前为止一切都很好。
现在我遇到了if语句的问题(我还假设其他更复杂的语句),因为我得到了一个类型为FuncVarPtg的Ptg,我不知道如何获取操作数及其中包含的引用
FormulaParser.parse(“IF(C2> D2,A1,B1)”)生成 if condition 中引用的单元格,但不生成中中的单元格和 else 分支。这是一些示例性输出(单元格C2保持值1.0,单元格D2保持0.0,即使用RefPtg.getRow()和RefPtg.getColumn()来解析和遵循这些引用没有问题
fromCell IF(C2>D2,A1,B1)
ptg org.apache.poi.ss.formula.ptg.RefPtg [C2]
fromCell 1.0
ptg org.apache.poi.ss.formula.ptg.RefPtg [D2]
fromCell 0.0
ptg org.apache.poi.ss.formula.ptg.FuncVarPtg [IF nArgs=3]
我的问题简而言之:有没有办法从FuncVarPtg中获取引用的操作数?
答案 0 :(得分:1)
好吧,我的错误是我认为POI会以不同的方式处理这个问题。不需要访问FuncVarPtg来获取嵌套的操作数(反过来我的应用程序需要的RefPtgs和AreaPtgs)。 FormulaParser.parse()返回公式中出现的所有Ptgs(包括嵌套的)的数组。因此,对于我的应用程序,只需为RefPtgs和AreaPtgs过滤该数组。