數字全部從Apache POI單元格值作爲Double返回。Apache POI - 以整數形式獲取數字
當我做getCell(...).toString()
時,在Excel中顯示爲「123」的數字將轉換爲「123.0」。
我怎麼知道這個數字應該顯示爲一個整數?我需要在Java中應用一些魔法來複制Excel對「常規」格式的操作嗎?
數字全部從Apache POI單元格值作爲Double返回。Apache POI - 以整數形式獲取數字
當我做getCell(...).toString()
時,在Excel中顯示爲「123」的數字將轉換爲「123.0」。
我怎麼知道這個數字應該顯示爲一個整數?我需要在Java中應用一些魔法來複制Excel對「常規」格式的操作嗎?
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));
}
}
您的解決方案DataFormatter正是我一直在尋找。它適用於General,併爲我提供會計的小數位數。只有我不明白的是,爲什麼當Excel中沒有貨幣符號時,它會給我一個「*」號? – wrschneider 2013-03-21 21:07:46
有必要檢查應用於單元格的Excel格式字符串(Excel有時顯示與寫入文件不同的內容,尤其是在非英文語言環境中)。 – Gagravarr 2013-03-21 21:33:00
如果你提供了一個例子,我會非常感激。 – winklerrr 2015-11-05 12:14:40
// 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();
您應該提供代碼的解釋。 – YoungHobbit 2015-12-08 16:31:41
此代碼將給出格式爲百分比的單元格的不正確答案,因爲貨幣符號和其他許多情況也是如此! – Gagravarr 2015-12-08 21:35:07
此代碼僅用於使用Apache POI進行讀取和Int字段,使用getNumericCellValue()方法 – renelhs 2015-12-09 14:11:57
我會很感激,如果你提供的代碼 – winklerrr 2015-11-05 12:16:20