2013-03-21 28 views
9

數字全部從Apache POI單元格值作爲Double返回。Apache POI - 以整數形式獲取數字

當我做getCell(...).toString()時,在Excel中顯示爲「123」的數字將轉換爲「123.0」。

我怎麼知道這個數字應該顯示爲一個整數?我需要在Java中應用一些魔法來複制Excel對「常規」格式的操作嗎?

+0

我會很感激,如果你提供的代碼 – winklerrr 2015-11-05 12:16:20

回答

15

Excel存儲的文件格式爲浮點值,這就是爲什麼POI會給你回一個雙對數字小區,這就是幾乎所有的數字真的有

我相信,雖然它不是很清楚從你的問題來看,你想要做的是在Java中獲得一個包含數字的String對象,就像它在Excel中看起來一樣?即將應用於單元格的格式化規則應用於原始數字,並讓您恢復格式化的字符串?

如果是這樣,你想要做的事情完全一樣as in my answer here。引用:

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

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

編輯而對於那些你們誰顯然找到clicking through to the JavaDocs to be just that little bit too much work...,你需要使用DataFormatter.formatCellValue(Cell)方法。如果迭代,你會做線沿線的東西:

Workbook workbook = WorkbookFactory.create(new File("input.xlsx")); 
DataFormatter formatter = new DataFormatter(); 
Sheet s = workbook.getSheetAt(0); 
for (Row r : s) { 
    for (Cell c : r) { 
    System.out.println(formatter.formatCellValue(c)); 
    } 
} 
+0

您的解決方案DataFormatter正是我一直在尋找。它適用於General,併爲我提供會計的小數位數。只有我不明白的是,爲什麼當Excel中沒有貨幣符號時,它會給我一個「*」號? – wrschneider 2013-03-21 21:07:46

+0

有必要檢查應用於單元格的Excel格式字符串(Excel有時顯示與寫入文件不同的內容,尤其是在非英文語言環境中)。 – Gagravarr 2013-03-21 21:33:00

+0

如果你提供了一個例子,我會非常感激。 – winklerrr 2015-11-05 12:14:40

-1
// We create a variable of type Workbook and load the excel for reading the fields.  

HSSFWorkbook workbook = new HSSFWorkbook(new FileInputStream("LIST.xls")); 

// Getting the working sheet 

HSSFSheet sheet = workbook.getSheetAt(0); 

// Getting the working row 

HSSFRow row = sheet.getRow(0); 

// Store the numeric value on Int var 

int d = (int) row.getCell(0).getNumericCellValue(); 

// Printing the result 

System.out.println(d0); 

// Close the current workbook 

workbook.close(); 
+2

您應該提供代碼的解釋。 – YoungHobbit 2015-12-08 16:31:41

+0

此代碼將給出格式爲百分比的單元格的不正確答案,因爲貨幣符號和其他許多情況也是如此! – Gagravarr 2015-12-08 21:35:07

+0

此代碼僅用於使用Apache POI進行讀取和Int字段,使用getNumericCellValue()方法 – renelhs 2015-12-09 14:11:57