Apache POI:获取一个string的数字,如在Excel中显示的那样

我试图用POIparsing一个excel工作簿。 在一张表中,我有一些数字显示为:

06 85 85 65 45

(这是一个法国电话号码,它总是以0开头,每两位有一个空格)。

我的需要是从零和空格的Excel单元格中获取一个string。

以下是我调查的一些内容:

double doubleValue = cell.getNumericCellValue(); // worth 6.85856545E8 String dataStringFormat = cell.getCellStyle().getDataStringFormat(); // worth 0#" "##" "##" "##" "## 

我想有一种POI API的方式将“dataStringFormat”应用于“doubleValue”以获得诸如06 85 85 65 45之类的东西。

任何人都有一个关于如何做到这一点的想法?

非常感谢你。

编辑:加格拉瓦尔把我的方式。 他的

 DataFormatter fmt = new DataFormatter(); String phoneNumber = fmt.formatCellValue(cell); 

仍然返回685856545,但我感谢他,我find了CellNumberFormatter类。 并用以下代码获取我的06 85 85 65 45:

 String stringFormat = cell.getCellStyle().getDataFormatString(); CellNumberFormatter fmt = new CellNumberFormatter(stringFormat); String phoneNumber = fmt.format(cell.getNumericCellValue()); // = 06 85 85 65 45 

我尝试了其他格式的伎俩,还有一些问题。 – 123 3/25变成123 ?? / ?? (不支持分数格式?) – 1,23E + 09变为1,23.1,E + 09

一些因为地方: – 123 456 789变成123456789(分隔符为数千和数百万我用法语而不是“,”) – 123,12变成123.45(再次,','是法语中的十进制分隔符,不是'。') – €成为? (在这里编码?)

在时间和date上有一些奇怪的现象:-12:12:12 PM变成[$ -4.69] 12:00:42 AM([$ -4.69]是excel stringFormat的一部分,似乎不被POI支持)-12/11/14变成01/01/04(我不明白那个…)

我会试着去调查一下。

谢谢你的帮助。

Excel中的数字(除less数边缘情况外)以浮点数forms存储。 Java中的浮点数格式化为string时,打印的结尾为小数点,如果大,则以科学(指数)格式打印

假设你真正想要的是“给我一个看起来像Excel显示的单元格的string”,那么不要调用cell.toString(), 也不要将数字双精度值+ print作为string来获取。 这些不会给你你所需要的。

相反,您需要使用DataFormatter类 , 该类提供读取应用于单元格的Excel格式规则的方法,然后在Java中重新创build(尽可能地)

你的代码应该是:

 DataFormatter fmt = new DataFormatter(); String phoneNumber = fmt.formatCellValue(cell); 

这将根据在Excel中应用的格式化规则来格式化数字,所以应按照您的期望返回它

当您尝试以stringforms提取数字单元格时,将会出现错误。

在获取数字单元格之前,应该像下面那样将cellType设置为string。

 ` HSSFCell yourCell = sheet1.getRow(row).getCell(column); yourCell.setCellType(Cell.CELL_TYPE_STRING); String data = yourCell.getStringCellValue();`