2012-04-19 102 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。但要小心,因爲它的文檔中描述:

「這個過程可以在大張的速度相對較慢,所以這應該 通常只能使用一次每列叫,你 結束處理「