gpt4 book ai didi

java - 如何在 DataFormatter 中编辑模式?

转载 作者:行者123 更新时间:2023-11-30 02:04:45 28 4
gpt4 key购买 nike

我想用Java读取Excel中的数据,Excel中单元格的数据有2种类型:NUMERICSTRING。因此,当我想将数据读取为 NUMERIC 时,它只显示数字 101125340004,而不像这个 1.01E+11 因为它是一个电话属性。我的代码正在工作,但对于某些值(1%)仍然显示 float ,但它们实际上是整数,我不知道为什么。

Excel 365工作表中的数据 enter image description here

DataFormatter fmt = new DataFormatter();
if (cellType.toString().equals("NUMERIC"))
companyTel = fmt.formatCellValue(currentRow.getCell(8));
else
companyTel = currentRow.getCell(8).toString();

输出在数据库中仍然有 float enter image description here

我使用的 Java Apache POI 版本是 3.17。

请告诉我上面的代码有什么问题或者如何解决这个问题?谢谢大家。

最佳答案

当使用单元格数字格式常规时,

Microsoft Excel 会将超过 11 位数字的值转换为科学记数法。因此,在具有数字格式“常规”的 Excel 单元格中,842223622111 会生成 8,42224E+11。如果在 Excel 中,单元格应显示 842223622111,则需要特殊的数字格式 (0),而不是 常规 .

您可以阅读 available number formats in Excel for Office 365以及大数字(12 位或更多数字)的General 格式的特殊行为。

Libreoffice/OpenOffice Calc 不会这样做。在具有数字格式常规的单元格中,842223622111 保留为842223622111

现在,如果 apache poi 获取包含 842223622111 且具有数字格式 General 的单元格,则 DataFormatter 将像 Excel 一样格式化它也可以。

如果您希望 DataFormatter 的格式更像 Libreoffice/OpenOffice Calc,那么您可以这样做:

...
DataFormatter fmt = new DataFormatter();
...
fmt.addFormat("General", new java.text.DecimalFormat("#.###############"));
...

使用此方法,无需对 Excel 工作表进行任何更改。当然,apache poiDataFormatter 的默认行为已更改。为了避免这种情况,您可以使用数字格式 0Excel 中格式化受影响的单元格,即不带千位分隔符和小数点位数的 Number = 0。

但是既然您提到此列包含电话号码,最常见的解决方案是使用数字格式 Text (@) 格式化整个列。这“将单元格的内容视为文本,并按照您键入的内容准确显示内容,即使您键入数字也是如此。”因此,应用格式后,科学记数法将不再发生任何变化。

关于java - 如何在 DataFormatter 中编辑模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51682898/

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