2013-05-10 66 views
3

當我讀取excel數值單元格值時,我得到的輸出爲小數。例如:79讀數爲79.0,0.00讀數爲0.0。我的應用我寫的代碼是:閱讀Excel數值單元值,因爲它們在Java中

int type = cell.getCellType(); 
if (type == HSSFCell.CELL_TYPE_NUMERIC) 
    System.out.println(cell.getNumericCellValue()); 

回答

13

Stack Overflow上出現了這個問題,所以你最好建議查看許多類似的問題來看看答案!

Excel以文件格式將幾乎所有數字都作爲浮點值存儲,這就是爲什麼POI會爲您返回數字單元格的雙倍數據,因爲這是真正存在的數據格式。如果您希望它看起來像在Excel中那樣,則需要將針對單元格定義的格式規則應用於該數字。因此,你想要做同樣的事情as in my answer here。引用:

你想要做的是使用DataFormatter class。您將這個單元格傳遞給它,並儘可能返回一個包含Excel將顯示給該單元格的字符串的字符串。如果你將它傳遞給一個字符串單元格,你會得到字符串。如果您將格式化規則應用於數字單元格,它將根據它們格式化數字並將字符串返回。

對於你的情況,我會假設數字單元格有一個整數格式規則適用於他們。如果您要求DataFormatter格式化這些單元格,它會返回一個包含整數字符串的字符串。

所有你需要做的是:

// Only need one of these 
DataFormatter fmt = new DataFormatter(); 

// Once per cell 
String valueAsSeenInExcel = fmt.formatCellValue(cell); 
+0

謝謝,我用DataFormatter得到了所需的解決方案。非常感謝你!! – 2013-05-10 14:50:24

1

我不是100%,這會工作,但我相信你在找什麼是DecimalFormat

+0

是的,問題與POI無關......它是關於格式化一個Java double的問題 – 2013-05-10 13:42:09

+0

這個問題與POI有關,我使用org.apachi.poi來讀取單元格值。請在這個問題中幫助我。 – 2013-05-10 14:08:35

+0

我想讀取它們在Excel中的數值單元格值。但我的代碼是79 - > 79.0,100.50 - > 100.5。請糾正我在哪裏做錯了,我找不到它。幫我! – 2013-05-10 14:30:42

1

我假設您使用的是Apache POI。

你應該考慮玩DataFormat s。 Here是一些非常小的草案代碼。否則,如果工作簿中的數據一致,則可能需要將getNumericCellValue返回的double四捨五入爲int

System.out.println((int)Math.round(cell.getNumericCellValue())); 
+0

單元格也具有雙重值(例如:100.50)。在嘗試使用你建議的代碼後,我得到的輸出是100,這是不希望的。如果這些值是79,100.50,我應該閱讀它們,因爲它們在Excel中。請幫幫我。 – 2013-05-10 13:14:14

+0

我不想將來自Excel的任何數字單元值舍入,我只是想按原樣讀取它們。但它讀數爲79 - > 79.0,100.50 - > 100.5。請幫我解決這個問題。 – 2013-05-10 13:34:44

+0

好,所以你也有實際的雙重價值,因此四捨五入他們將無法正常工作。你有沒有試過檢查Apache POI的DataFormat?我相信它會引導你走向正確的方向。這裏有一些其他的鏈接讓你開始:http://poi.apache.org/apidocs/org/apache/poi/ss/usermodel/DataFormatter.html和https://poi.apache.org/apidocs/org/ apache/poi/ss/usermodel/BuiltinFormats.html – Mena 2013-05-10 16:19:49

0

使用DataFormatter爲下,它會自動檢測單元格的格式,併產生字符串輸出

    DataFormatter formatter = new DataFormatter(); 
        String df2 = formatter.formatCellValue(cell); 
相關問題