2016-05-12 95 views
1

我用apache poi 3.14創建一個excel文件,它必須包含不同類型的數據,包括日期。用apache poi寫舊日期

我的代碼在大多數情況下工作正常。 在單元格中編寫特定日期(java.util.Date)時,我遇到了問題。 這裏是我的代碼:

Date date; 

// code where I get the value of date 

Cell currentCell = currentRow.createCell(fieldPos++); 

// line below doesn't work for date like '11/11/1811' but work for '11/11/2111' 
currentCell.setCellValue(date); 

currentCell.setCellStyle(myDateStyle); 

讓我們假設我有3個日期寫:

  • 01/01/2009
  • 2111年11月11日
  • 1811年11月11日

我的excel文件看起來像:

| 01/01/2009 | 11/11/2111 | blankcell |

線currentCell.setCellValue(日期)設定值(根據我DATESTYLE)

爲什麼它不是爲-1時的日期等於在我的Excel 1811年11月11日,以便文件,它顯示爲空白爲特定日期工作,我該如何解決這個問題?

回答

3

找到了原因!

setCellValue的Apache POI的(日期d)儘量給定的java.util.Date轉換成EXCEL「datenumber」:

Excel存儲日期和時間爲代表自1900年以來的天數的數-Jan-0,再加上24小時的一小部分:ddddd.tttttt。這被稱爲序列日期或序列日期時間。

這就是爲什麼在1900年前給定日期時setCellValue將值設置爲-1導致它無法進行轉換操作。

解決了setCellValue(Date d)設置爲-1時調用setCellValue(String s)和Date.toString()的問題,唯一剩下的問題是我改變了數據。