2013-03-21 707 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

相关问题