数字都以 Double 形式从 Apache POI 单元格值返回。
当我这样做时getCell(...).toString()
,在 Excel 中显示为“123”的数字将转换为“123.0”。
我怎么知道数字应该显示为整数?我需要在 Java 中应用一些魔法来复制 Excel 对“常规”格式所做的事情吗?
数字都以 Double 形式从 Apache POI 单元格值返回。
当我这样做时getCell(...).toString()
,在 Excel 中显示为“123”的数字将转换为“123.0”。
我怎么知道数字应该显示为整数?我需要在 Java 中应用一些魔法来复制 Excel 对“常规”格式所做的事情吗?
Excel 将文件格式中的几乎所有数字都存储为浮点值,这就是为什么 POI 会为您返回一个数字单元格的双精度值,因为这才是真正存在的
我相信,虽然你的问题不太清楚,但你想要做的是在 Java 中获取一个 String 对象,其中包含它在 Excel 中看起来的数字?即将应用于单元格的格式化规则应用到原始数字,并返回格式化字符串?
如果是这样,您想做与我在此处的回答完全相同的事情。去引用:
您要做的是使用DataFormatter 类。您将此单元格传递给它,它会尽力返回一个字符串,其中包含 Excel 会为您显示该单元格的内容。如果你给它传递一个字符串单元格,你会得到这个字符串。如果您传递一个应用了格式规则的数字单元格,它将根据它们格式化数字并返回字符串。
对于您的情况,我假设数字单元格应用了整数格式规则。如果您要求 DataFormatter 格式化这些单元格,它会返回一个包含整数字符串的字符串。
编辑对于那些显然发现点击 JavaDocs 的工作量太大的人来说,您需要使用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));
}
}
// 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();