gpt4 book ai didi

java - Excel 中显示的 Apache POI : getting a number as a string,

转载 作者:行者123 更新时间:2023-12-01 22:41:46 25 4
gpt4 key购买 nike

我正在尝试使用 POI 解析 Excel 工作簿。在工作表中,我有一些数字显示为:

06 85 85 65 45

(这是一个法国电话号码,始终以 0 开头,每 2 位数字有一个空格)。

我的需要是从 Excel 单元格中获取带有零和空格的字符串。

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

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,但我感谢他,我找到了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 变为 123,456,789(千和百万的分隔符,法语中用“”代替“,”)- 123,12 变为 123.45(同样,“,”是法语中的小数分隔符,而不是“.”)- 欧元变成? (在这里编码?)

时间和日期有奇怪的行为:-12:12:12 PM 变为 [$-4.69]12:00:42 AM ([$-4.69] 是 excel stringFormat 的一部分,POI 似乎不支持)-12/11/14 变成 01/01/04 (我不明白那个...)

我会尝试对此进行调查。

感谢您的帮助。

最佳答案

Excel 中的数字(除了少数边缘情况)存储为 float 。 Java 中的 float ,当格式化为字符串时,会以尾随小数点打印,如果较大,则以科学(指数)格式打印,如您所见

假设您真正想要的是“给我一个看起来像 Excel 在该单元格中显示的字符串”,那么不要调用 cell.toString(),并且不获取数字 double 值+ 作为字符串打印。这些不会给你你所需要的。

相反,您需要使用 DataFormatter class ,它提供了读取应用于单元格的 Excel 格式规则的方法,然后在 Java 中重新创建(尽可能)这些规则

您的代码应该是:

DataFormatter fmt = new DataFormatter();

String phoneNumber = fmt.formatCellValue(cell);

这将根据 Excel 中应用的格式设置规则来设置数字格式,因此返回的结果应符合您的预期

关于java - Excel 中显示的 Apache POI : getting a number as a string,,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26018080/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com