2009-06-08 8 views
4

Je tente de générer des feuilles Excel dans l'application Java en utilisant JExcelAPI (version 2.6.3) et je ne peux pas générer correctement les cellules de date. Par exemple, pour le code:JExcelAPI - la date d'écriture dans la feuille Excel ignore le jour, le mois et l'année

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(); 
    } 

La sortie (sur la console) est:
Date1 est Lun 8 juin 11:14:45 GMT + 01: 00 2009
Mon anniversaire est le Mer 17 octobre 08 : 15: 45 GMT + 01: 00 2007

Et dans un fichier Excel, les cellules sont
1900-01-00 10:14:46
1900-01-00 07:15:46

La partie de temps dans Excel est corrigée en UTC et la partie de date est supprimée. Bien que la référence mentionne un problème de fuseau horaire, elle ne dit rien sur les dates d'élimination. Qu'est-ce que je fais mal?

Répondre

6

OK. Je l'ai compris. Création DateFormat

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

et le passage à constructeur DateTime

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

corrige ce problème. Il semble que par défaut seule la partie temps est prise. Désolé pour mon idiot.

+0

N'ajoutez pas de nouvelle réponse. Modifier votre original – duffymo

+1

ou acceptez cette réponse pour clarifier vous avez compris le problème –

+0

Vous venez de résoudre mon problème très similaire :) –

0

POI n'est pas la réponse que je recommanderais. JExcel peut le gérer. Je ne vois pas où vous avez défini le type sur cette cellule. Jetez un oeil à DateFormats.

Le problème est le même si vous utilisez Excel. Si vous entrez une Date dans une cellule qui n'a pas ce format défini, vous aurez un comportement inattendu.

+0

J'ai créé un WritableCell de type jxl.write.DateTime. Je m'attendais à ce qu'il définisse le bon type (comme jxl.write.Number définit le type au nombre). Mais il semble qu'un DateFormat est également nécessaire. Je pensais que seul l'affichage contrôlé, mais il affecte également quelle partie de java.util.Date est écrite. –

Questions connexes