15

数字都以 Double 形式从 Apache POI 单元格值返回。

当我这样做时getCell(...).toString(),在 Excel 中显示为“123”的数字将转换为“123.0”。

我怎么知道数字应该显示为整数?我需要在 Java 中应用一些魔法来复制 Excel 对“常规”格式所做的事情吗?

4

2 回答 2

26

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));
  }
}
于 2013-03-21T20:39:54.827 回答
-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();
于 2015-12-08T16:13:40.060 回答