1

一部のセルから始まる 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 から取得する方法はありますか?

4

1 に答える 1

1

さて、私の間違いは、POI がこれを別の方法で処理すると想定していたことです。ネストされたオペランドを取得するために FuncVarPtg にアクセスする必要はありません (さらに、アプリケーションに必要な RefPtgs と AreaPtgs も取得します)。FormulaParser.parse() は、数式に表示されるすべての Ptgs (ネストされたものを含む) の配列を返します。したがって、私のアプリケーションでは、RefPtgs と AreaPtgs の配列をフィルタリングするだけで十分です。

于 2012-11-05T14:16:59.783 に答える