编辑: 为了避免混淆,这是我原来问题的(再次)改进版本:
问题 如何以 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/