1

我想从某个单元格开始计算 Excel 电子表格的切片( http://en.wikipedia.org/wiki/Program_slicing )。这意味着我需要找出单元格中引用了哪些单元格并递归地遵循这些引用。到现在为止还挺好。

现在我遇到了 if 语句的问题(我也假设其他更复杂的语句),因为我得到了一个 FuncVarPtg 类型的 Ptg,我不知道如何获取操作数和其中包含的引用。

FormulaParser.parse("IF(C2>D2,A1,B1)") 产生if 条件中引用的单元格,但不是thenelse分支中的单元格。这是一些示例性输出(单元格 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 中获取引用的操作数?

4

1 回答 1

1

好吧,我的错误是我认为 POI 会以不同的方式处理这个问题。无需访问 FuncVarPtg 即可获取嵌套操作数(以及我的应用程序所需的 RefPtgs 和 AreaPtgs)。FormulaParser.parse() 返回公式中出现的所有 Ptg(包括嵌套的)的数组。因此,对于我的应用程序,过滤该数组以获取 RefPtgs 和 AreaPtgs 就足够了。

于 2012-11-05T14:16:59.783 回答