我想从某个单元格开始计算 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() 返回公式中出现的所有 Ptgs(包括嵌套的 Ptgs)的数组。因此,对于我的应用程序来说,过滤该数组中的 RefPtgs 和 AreaPtgs 就足够了。
关于java - 是否可以从 Apache POI 中的 FuncVarPtg 获取操作数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13195020/