【发布时间】:2013-08-26 07:59:16
【问题描述】:
编辑: 为避免混淆,这是我原来问题的(再次)改进版本:
问题 如何以 Microsoft Excel 显示单元格的方式读出单元格的字符串表示形式,而不知道各自对格式设置进行硬编码(但例如使用单元格自己的格式设置来格式化输出)。
回答这么远 如果您使用的是美国版的 excel,这将没有问题,对于所有其他版本,Apache POI 将返回与美国版 excel 的显示方式相同的字符串,并且 Apache POI 中没有内置方式可以更改这个。我可以确认“工作”的唯一方法是 - 正如 Gagravarr 建议的那样 - 将我的 Mac 上的语言切换为 US/EN。然后 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 中相同的格式吗?
感谢您的帮助!谢谢!
【问题讨论】:
-
我很确定您的文件在格式字符串中实际上不会包含 Ts 和 Js,我怀疑这是“神奇”的 Excel 本地化功能。如果您在计算机上以美国语言环境,它在那里显示的方式与 POI 相同吗?
-
耶!当我将我的 Mac 切换到英语时,您完全正确,Excel 中的格式与 Apache POI 中的格式相同!对于解决方法,我只需要知道如何读出单元格的格式设置。
-
Excel 有两种格式字符串,一种是“神奇地”本地化自己,另一种是在任何地方看起来都一样。我建议您将您的单元格明确地格式化为后者,首先是这样 POI 能够得到您想要的内容,其次是让您发送文件的其他人也能以您的方式查看它!
-
问题是我的客户从他的客户那里得到了那些 excel 表格,而且他们不会正确地格式化他们的表格。对于大多数办公室来说,Excel 格式仍然是 Voodoo。戳它直到它看起来正确。一旦我找到了一个优雅的解决方案,我会在这里发布。谢谢大家的意见!
标签: java excel apache-poi