2012-04-19 73 views
1

我遇到问题。我使用的是Apache POI 3.8,我需要设置日期到Excel单元格。但我不明白 - 如何根据用户区域设置日期。由于美国格式的日期是月/日/年,俄语区域 - 日/年/月。我使用下一代码为我的任务Apache POI本地化日期到Excel单元格

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

如果有人知道 - 如何设置的单元格日期值取​​决于用户区域设置,请回答。 注意。如果我使用“m/d/yy h:mm”,那么我在Excel文件中看不到我的日期(在单元格中只看到“######”字符串)。 谢谢。

回答

3

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

+0

好的,谢谢,我明白了。但我的主要问题 - 如何根据用户区域设置日期到Excel单元格? – VladislavLysov

0

区域设置可以在formatListener

设置
MissingRecordAwareHSSFListener listener = new MissingRecordAwareHSSFListener(this); 
formatListener = new FormatTrackingHSSFListener(listener, Locale.UK); 
+0

你知道如何在SXSSF模式下实现相同吗? –

2

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

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

您可以测试它改变你的机器的语言环境(对于Windows:控制面板 - >时钟,语言和区域 - >语言 - >更改日期,时间或数字)。正如您将看到的,对于不同的语言环境,相同的Excel文档将以不同的方式显示。


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

“这个过程可以在大张的速度相对较慢,所以这应该 通常只能使用一次每列叫,你 结束处理“