编辑: 为了避免混淆,这里是一个我原来的问题(再次)的改进版:的Apache POI语言版本会导致日期格式误解
问题 我如何读出一个细胞的String表示刚Microsoft Excel将显示它的方式,而不知道各自对格式设置进行硬编码(但例如使用单元格自己的格式设置来格式化输出)。
答案至今 这将是没有问题的,如果你正在使用Excel的美国版本,所有其它版本的Apache POI将返回字符串等同于Excel中的美版将如何显示它并没有在Apache POI中没有内置的方法来改变这一点。只有我可以确认的方式是,“working”是 - 正如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
一个VAL。
原来的问题是:
我在使用电池TT.MM.JJ
的格式设置。如果我包含显示在Excel中像
01.12.13
日期字段XLSX文件用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的相同方式? – Gagravarr
耶!当我将Mac切换到英文时,您完全正确,Excel中的格式与Apache POI中的格式相同!对于解决方法,我只是需要知道如何读出单元格的格式设置。 –
Excel有两种格式字符串,那些“神奇地”将自己本地化的字符串,以及那些在任何地方都一样的字符串。我建议你把你的单元格格式化为后者,首先让POI能够得到你想要的内容,其次让你发送文件的其他人看到它的样子! – Gagravarr