Apache POI本地化date到Excel单元格

我有个问题。 我使用的是Apache POI 3.8,我需要设置date到Excel单元格。 但我不明白 – 如何根据用户区域设置date。 因为美国格式的date是月/日/年,在俄语区域 – 日/年/月。 我为我的任务使用下一个代码

CellStyle dateStyle = workbook.createCellStyle(); dateStyle.setDataFormat(dataFormat.getFormat("m/d/yy")); cell.setCellStyle(dateStyle); 

如果有人知道 – 如何根据用户区域设置单元格date值,请回答。 注意。 如果我使用“m / d / yy h:mm”,那么我在Excel文件中看不到我的date(在单元格中我只看到“######”string)。 谢谢。

尝试并展开单元格。 有时如果单元格宽度太短######被视为输出。 要获得本地化的模式,你可以看到这个参考

Excel根据打开文档的机器的区域设置显示date和数字。 所以你不需要关心它。

在你的代码中你使用模式“m / d / yy”。 Excel会自动将其转换为“de_DE”语言环境中的“dd.MM.yyyy”,“en_GB”语言环境中的“dd / MM / yyyy”等等。

你可以testing它改变你的机器的语言环境( 对于Windows: 控制面板 – >时钟,语言和地区 – >语言 – >更改date,时间或数字 )。 正如您将看到相同的Excel文档将显示不同的区域设置。


关于“######”,您可以使用Sheet#autosizeColumn 。 但要小心,因为正如文档中所述:

“这个过程在大尺寸纸张上可能会比较慢,所以在处理结束时通常应该每列只调用一次”

区域设置可以在formatListener上设置

 MissingRecordAwareHSSFListener listener = new MissingRecordAwareHSSFListener(this); formatListener = new FormatTrackingHSSFListener(listener, Locale.UK);