- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想用Java读取Excel中的数据,Excel中单元格的数据有2种类型:NUMERIC
和STRING
。因此,当我想将数据读取为 NUMERIC
时,它只显示数字 101125340004
,而不像这个 1.01E+11
因为它是一个电话属性。我的代码正在工作,但对于某些值(1%)仍然显示 float ,但它们实际上是整数,我不知道为什么。
DataFormatter fmt = new DataFormatter();
if (cellType.toString().equals("NUMERIC"))
companyTel = fmt.formatCellValue(currentRow.getCell(8));
else
companyTel = currentRow.getCell(8).toString();
我使用的 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 poi
的 DataFormatter
的默认行为已更改。为了避免这种情况,您可以使用数字格式 0
在 Excel
中格式化受影响的单元格,即不带千位分隔符和小数点位数的 Number
= 0。
但是既然您提到此列包含电话号码,最常见的解决方案是使用数字格式 Text
(@
) 格式化整个列。这“将单元格的内容视为文本,并按照您键入的内容准确显示内容,即使您键入数字也是如此。”因此,应用格式后,科学记数法将不再发生任何变化。
关于java - 如何在 DataFormatter 中编辑模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51682898/
我是一名优秀的程序员,十分优秀!