gpt4 book ai didi

java - 在 Java 中读取 Excel 中的值,Windows 与 Linux 的问题

转载 作者:行者123 更新时间:2023-12-04 22:22:35 26 4
gpt4 key购买 nike

我在 Springboot 中有 Java 应用程序,我从单元格 3123456,89 中读取数值数值,我们在 Excel 中使用货币格式欧洲 -> . 千和 , 小数。

String stringValue = new DataFormatter().formatCellValue(cell);

我将单元格读取为字符串。

然后我将此字符串解析为 Double ->
Double.parseDouble(stringValue .replaceAll("\\.", "").replaceAll(",", "."));

我需要这个解析,因为我们以欧洲格式插入数字,但 Java 是美国格式( , 千和 . 小数)

这个过程在 WINDOWS 下是正确的。

现在我将我的应用程序上传到 Linux,我有任何问题......

现在我得到这个值 -> 3,123,456,89 ,如果我使用替换 -> "Error multiple points" 如果我希望替换 , 我会丢失部分小数...

我使用 apache.poi 来读取 Excel。
  <!-- EXCELS -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.15</version>
</dependency>

最后在linux中我有这个代码的问题,在windows中是正确的。谢谢。

最佳答案

似乎您的问题是由以下事实引起的,即在您的 Linux系统 Java使用不同的默认值 Locale比你的 Windows系统。

您可以构建 DataFormatter有一个特殊的Locale .如果是 Locale.US , 那么整个替换就没有必要了,因为 stringValue将被格式化为 Locale.US .然后你可以使用 java.text.NumberFormat获得Number的相同语言环境出弦外。

...
DataFormatter dataFormatter = new DataFormatter(java.util.Locale.US);
java.text.NumberFormat numberFormat = java.text.NumberFormat.getInstance(java.util.Locale.US);
String stringValue = dataFormatter.formatCellValue(cell);
Double doubleValue = null;
try {
doubleValue = numberFormat.parse(stringValue).doubleValue();
} catch (Exception ex) {
//do nothing
}
...

另一种方法是将单元格值作为数值而不是格式化字符串。

对于 apache poi 3.15这就像:
...
if (cell.getCellTypeEnum() == CellType.NUMERIC) {
Double doubleValue = cell.getNumericCellValue();
}
...

另见 https://poi.apache.org/components/spreadsheet/quick-guide.html#CellContents .

关于java - 在 Java 中读取 Excel 中的值,Windows 与 Linux 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61244640/

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