顯示具有 java-POI 標籤的文章。 顯示所有文章
顯示具有 java-POI 標籤的文章。 顯示所有文章

2009-06-01

POI之Hssf的formula bug

問題是:
使用 countif 這個function 之後所產生該欄位的值是 #value!
使用辜狗大神找了很久都沒找到,有的是有人發問題但是沒有解...
後看發現問題點是在於該欄位沒有計算所導致,因為我點選fx之後值就算出來了
官網FormulaEvaluation的說明
所以猜測應該是沒計算所導致 依照官網的範例
就在程式碼中加上這行 "evaluator.evaluateFormulaCell(c);"
但是根本沒有這個"evaluateFormulaCell()" 傻眼...難道版本不同??
找到只有evaluate()能用,所以就將就用一下,試出來的結果還是一樣...囧...

後來一直反覆看都不知道為什麼??
在最上頭看到一個Note
In versions of POI before 3.0.3, this code lived in the scratchpad area of the POI SVN repository. If using an such an older version of POI, ensure that you have the scratchpad jar or the scratchpad build area in your classpath before experimenting with this code. Users of all versions of POI may wish to make use of a recent SVN checkout, as new functions are currently being added fairly frequently.
版本問題??
接著去湯姆貓看一下lib的版本,發現我真是個笨蛋ㄚ,因為我湯姆貓中poi的版本竟然有3個....
把舊的移除,留最新的版本一試
眼淚都要留下來了....
卡了好久終於有值了,而且我也把evaluator.evaluate()拿掉也可以,就照一般寫formula的方法
最後確定3.1沒有這個問題而舊的2個版本都不行(3.0.2和3.0)

POI之Hssf的跨欄置中

跨欄置中這個功能是常常被用到的
剛好專研有用到,查了一下用法大概如下:
HSSFSheet s;
s.addMergedRegion(new Region(0,(short)0,1,(short)0));
new Region() 裡面有4個參數
1.row起點位置
2.cell起點位置
3.row結束位置
4.cell結束位置
蠻直觀的,應該很好理解