2012-12-12 131 views
5

我嘗試數字轉換成歐洲貨幣的風格與Apache POI的Apache POI貨幣數據格式

HSSFDataFormat cf = workbook.createDataFormat(); 
currencyCellStyle = workbook.createCellStyle(); 
currencyCellStyle.setDataFormat(cf.getFormat("#.###,#0")); 

我有例如數2400和2.4

我要的是2400,00和2, 40。 但POI給我2400,0和2,40。 當我嘗試將其更改爲

currencyCellStyle.setDataFormat(cf.getFormat("#.###,00")); 

我得到的結果2400,00和2,400元。 那也不是我想要的。

是否有可能使兩個值都正確?

Thx and Greetings

+0

我認爲你需要將格式字符串設置爲美國/英國風格,然後在歐洲語言環境中的Excel副本中打開該文件,它會按照您的預期呈現。你嘗試過嗎? – Gagravarr

+0

thx部分工作。當使用在Excel中打開時更改爲「2.400.0」的「#,###。#0」時,逗號和點被設置爲歐洲風格。但逗號後只有一個零。輸入的數字是2400. – Logarith

+1

如果您在Excel中創建一個新文件,如何設置樣式,然後將其加載到Apache POI中並讀取格式字符串,那麼您會看到什麼? – Gagravarr

回答

8

最後,Gagravarr給出了正確的提示來解決這個問題。

最終的解決方案是:創建一個Excel文件手動後

HSSFDataFormat cf = workbook.createDataFormat(); 
currencyCellStyle = workbook.createCellStyle(); 
currencyCellStyle.setDataFormat(cf.getFormat("#,##0.00\\ _€")); 

的解決方案上來。 然後被Apache POI和 閱讀與

cell.getCellStyle().getDataFormatString() 

結果是#,提取格式字符串## 0.00 \ _€

所以我用這個格式上的代碼段,這給了正確的結果。

THX

+0

嗨,我有你的同樣的問題。閱讀本頁我得到了我的格式字符串,將其設置爲currencyCellStyle變量,但我不知道如何使用它來讀取正確的值。 cell.getNumericCellValue()? cell.getStringCellValue()?你能解釋一下如何使用你剛纔設置的數據格式來讀取單元格的值嗎? 謝謝。 – Andrea

+0

我也想補充一點,我需要閱讀的單元格都是數字和計算的單元格,所以也有公式可以評估。我有一個HSSFFormulaEvaluator來評估它們,但結果仍然與Excel顯示的結果不一致(我正在討論精度和舍入)。 – Andrea

+0

嗨,對不起,我認爲我不能幫助你,因爲我沒有閱讀單元格的值。我只是用setCellValue寫的。例如cell.setCellStyle(currencyCellStyle)和cell.setCellValue(值) – Logarith

3

到上面方法的更新: 手動創建的excel與所需貨幣格式文件後,可以在「自定義」類別來獲得格式字符串(在格式細胞對話框)。這樣我們就不需要通過poi來讀取這個字符串。