2012-11-02 56 views
1

我想從某個單元格開始計算Excel Spreadsheet的片段(http://en.wikipedia.org/wiki/Program_slicing)。這意味着我需要找出單元格中引用的單元格,並遞歸地跟隨這些引用。到現在爲止還挺好。是否可以從Apache POI中的FuncVarPtg獲取操作數?

現在我遇到了if語句的問題(並且我假設其他更復雜的語句),因爲我得到了一個類型爲FuncVarPtg的Ptg,爲此我不知道如何獲取操作數和包含在他們。

FormulaParser.parse( 「IF(C2> D2,A1,B1)」)產生,如果條件在引用的細胞,但不是那些在然後別的分支。下面是一些示例性的輸出(小區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中取出?

+0

我已經解決它通過明確提取每個操作數並將其傳遞給FormulaParser.parse()。如果有通過FuncVarPtg的解決方案,我仍然感興趣。 –

+1

我建議你在[POI dev list](http://poi.apache.org/mailinglists.html)上尋求幫助,那裏有更多的POI專家! – Gagravarr

回答

1

好吧,我的錯誤是,我認爲POI會以不同的方式處理。不需要訪問FuncVarPtg來獲得嵌套的操作數(並且反過來我需要爲我的應用程序使用RefPtgs和AreaPtgs)。 FormulaParser.parse()返回出現在公式中的所有Ptgs(包括嵌套的)的數組。因此,對於我的應用程序來說,對RefPtgs和AreaPtgs進行過濾就足夠了。

相關問題