我想从某个单元格开始计算Excel电子表格的切片(http://en.wikipedia.org/wiki/Program_slicing)。这意味着我需要找出一个单元格中引用了哪些单元格,然后递归地遵循这些引用。到目前为止,一切都很好。
现在,我遇到了if语句(我也假设其他更复杂的语句)的问题,因为我得到了FuncVarPtg类型的Ptg,对此我不知道如何获取操作数和其中包含的引用。
FormulaParser.parse(“ IF(C2> D2,A1,B1)”)产生在if条件中引用的单元格,而不是then和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中获取引用的操作数?
最佳答案
好的,我的错误是我认为POI将以不同的方式处理此问题。不需要访问FuncVarPtg即可获取嵌套的操作数(进而获取我的应用程序所需的RefPtgs和AreaPtgs)。 FormulaParser.parse()返回出现在公式中的所有Ptg(包括嵌套的Ptg)的数组。因此,对于我的应用程序而言,为RefPtgs和AreaPtgs过滤该数组就足够了。