2009-06-08 107 views
4

我尝试使用JExcelAPI(v.2.6.3)在Java应用程序中生成一些Excel工作表,并且无法正确生成日期单元格。例如,下面的代码:JExcelAPI - 将日期写入Excel工作表忽略日期,月份和年份

WritableWorkbook workbook = null; 
    workbook = Workbook.createWorkbook(new File("C:\\tmp\\tests.xls")); 
    try { 
     Date date = new Date(); 
     final WritableSheet sheet = workbook.createSheet("Sheet", 0); 
     DateTime dateTime = new DateTime(0, 0, date); 
     sheet.addCell(dateTime); 
     System.out.println("Date1 is " + date); 
     final Calendar cal = Calendar.getInstance(); 
     cal.set(Calendar.YEAR, 2007); 
     cal.set(Calendar.MONTH, Calendar.OCTOBER); 
     cal.set(Calendar.DAY_OF_MONTH, 17); 
     cal.set(Calendar.HOUR_OF_DAY, 8); 
     cal.set(Calendar.MINUTE, 15); 
     date = cal.getTime(); 
     dateTime = new DateTime(0, 1, date); 
     sheet.addCell(dateTime); 
     System.out.println("My birthday is on " + date); 
    } finally { 
     workbook.write(); 
     workbook.close(); 
    } 

的输出(控制台)是:
日期1是周一六月08 11点十四分45秒GMT + 01:00 2009年
我的生日是在周三08年10月17日:15:45 GMT + 01:00 2007

,并在Excel文件中的细胞是
1900-01-00 10时十四分46秒
1900-01-00七时15分46秒

Excel中的时间部分已更正为UTC,并且日期部分被丢弃。尽管参考文献提到了时区问题,但没有提及丢弃日期。我究竟做错了什么?

回答

6

好的。我想到了。创建日期格式

DateFormat customDateFormat = new DateFormat ("dd MMM yyyy hh:mm:ss"); 
WritableCellFormat dateFormat = new WritableCellFormat (customDateFormat); 

并将它传递给DateTime的构造

DateTime dateTime = new DateTime(0, 0, date, dateFormat); 

修复它。似乎默认情况下只有时间部分被采用。对不起,我的愚蠢。

+0

不要添加新的答案。编辑您的原创。 – duffymo 2009-06-08 09:56:31

+1

或接受这个答案,说清楚你找到了问题 – 2009-06-08 13:01:57

0

POI不是我推荐的答案。 JExcel可以管理它。我没有看到你在哪个单元格上设置了类型。看看DateFormats

如果您使用的是Excel,问题是一样的。如果您将日期输入到未设置该格式的单元格中,则会出现意外的行为。

相关问题