一部のセルから始まる Excel スプレッドシートのスライス ( http://en.wikipedia.org/wiki/Program_slicing )を計算したいと考えています。つまり、セル内で参照されているセルを見つけて、それらの参照を再帰的にたどる必要があります。ここまでは順調ですね。
ここで、オペランドとそれらに含まれる参照を取得する方法がわからない FuncVarPtg 型の Ptg を取得するという点で、if ステートメントで問題に遭遇しました (そして、他のより複雑なステートメントも想定しています)。
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 から取得する方法はありますか?