我想从某个单元格开始计算 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 中获取引用的操作数?