Microsoft Excel
当单元格数字格式时,将超过 11 位数字的值转换为科学记数法General
用来。所以842223622111
导致8,42224E+11
in Excel
具有数字格式的单元格General
. If in Excel
单元格应显示842223622111
,然后是一个特殊的数字格式(0
)需要代替General
.
您可以阅读有关Office 365 Excel 中的可用数字格式以及其特殊行为General
大数字(12 位或更多数字)的格式。
Libreoffice/OpenOffice Calc
不会这样做。那里842223622111
stays 842223622111
在具有数字格式的单元格中General
.
现在,如果apache poi
得到一个包含842223622111
并具有数字格式General
, then DataFormatter
将这样格式化Excel
也会做。
如果你想要DataFormatter
应该将其格式化为更像Libreoffice/OpenOffice Calc
,那么你可以这样做:
...
DataFormatter fmt = new DataFormatter();
...
fmt.addFormat("General", new java.text.DecimalFormat("#.###############"));
...
使用这种方法,不会改变Excel
表是必要的。但当然默认行为apache poi
's DataFormatter
被改变了。为了避免这种情况,您可以格式化受影响的单元格Excel
使用数字格式0
,即Number
没有千位分隔符且小数点位数 = 0。
但既然您提到此列包含电话号码,最常见的解决方案是使用数字格式格式化整个列Text
(@
)。这“将单元格的内容视为文本,并按照您键入的内容准确显示内容,即使您键入数字也是如此。”因此,在应用格式之后,科学记数法将不再发生任何变化。