0

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

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

ANSWER SO FAR 如果您使用的是美国版的 excel,这将没有问题,对于所有其他版本,Apache POI 将返回与美国版 excel 的显示方式相同的字符串,并且在 Apache 中没有内置方式POI 来改变这一点。我可以确认“工作”的唯一方法是 - 正如 Gagravarr 建议的那样 - 将我的 Mac 上的语言切换为 US/EN。然后 Apache POI 和 Excel 将提供相同的结果。这是一种逆解决方案。

问题是:单元格的显示方式01.12.13与德文版 excel 中的一样,但由于它的格式为日期

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

给我一个 val 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 中相同的格式吗?

我很感激任何帮助!谢谢!

4

1 回答 1

1

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

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。

于 2013-08-26T08:50:01.223 回答