java - apache poi语言版本导致日期格式误解

标签 java excel apache-poi

编辑: 为了避免混淆,这是我原来问题的(再次)改进版本:

问题 如何以 Microsoft Excel 显示单元格的方式读出单元格的字符串表示形式,而不知道相应的硬编码格式设置(但例如使用单元格自己的格式设置来格式化输出)。

到目前为止的答案 如果您使用美国版本的 excel,这不会有问题,对于所有其他版本,Apache POI 将返回与美国版本的 excel 的显示方式等效的字符串,并且 Apache POI 中没有内置方法可以更改这。我可以确认“有效”的唯一方法是 - 正如 Gagravarr 所建议的 - 将我的 Mac 上的语言切换为美国/英语。然后 Apache POI 和 Excel 将提供相同的结果。这是一种逆解。

问题是:单元格在德语版本的 Excel 中显示为 01.12.13,但由于它的格式为日期

HSSFCell cell = (HSSFCell) cellIter.next();
HSSFDataFormatter formatter=new HSSFDataFormatter();
String val=formatter.formatCellValue(cell)

给我一​​个值21/01/13

<小时/>

原来的问题是:

我有一个 xlsx 文件,其中包含在 Excel 中显示的日期字段,例如

01.12.13 使用单元格的格式设置TT.MM.JJ

如果我使用 apache poi 读取相同的文件,则获取单元格和格式 à la

HSSFCell cell = (HSSFCell) cellIter.next();
HSSFDataFormatter formatter=new HSSFDataFormatter();
String val=formatter.formatCellValue(cell)

(当然,cellIter 是一个有效的迭代器,简化示例)

我的val结果是21/01/13。据我了解,HSFDataFormatter 的方法 formatCellValue() 应该返回一个使用单元格格式设置格式化的值的字符串。

有人知道如何让 val 包含与 Excel 中相同的格式吗?

非常感谢任何帮助!谢谢!

最佳答案

您可以自定义日期格式,如下所示:

HSSFCell cell = (HSSFCell) cellIter.next();
SimpleDateFormat DtFormat = new SimpleDateFormat("dd.MM.YY");
Date date=cell.getDateCellValue();
System.out.println(DtFormat.format(date).toString());

这会将值打印为 21.01.13。

关于java - apache poi语言版本导致日期格式误解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18439341/

相关文章:

apache-poi - 我们如何使用 POI API 读取 protected 密码 Excel 文件 (.xls)

java - Neo4j 类型不匹配

java - 读/写文件不会写入输出

Java 在创建由给定循环命名的变量时创建 for 循环

php - 如何使用 PhpSpreadSheet 折线图在每个标记中设置可见数据标签?

java - 如何使用 Java 在现有 Excel 文件中添加行?

java - 在 Dos 命令提示符中检查 Scala 的当前版本

arrays - 使用 Excel VBA 评估一维数组中可变长度字符串的最大长度

C#修改Excel文件,保持样式

java - Apache POI 性能