2009-06-08 3 views
4

JExcelAPI (버전 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이 월 6월 08 그리니치 표준시 11시 14분 45초 + 01 : 00 2009
내 생일이 수요일에 10월 17일 08 : 15 45 GMT + 01 : 00 2007

그리고 세포가 파일을 Excel에서
1900-01-00 10시 14분 46초
1900-01-00 7시 15분 46초

Excel의 시간 부분이 UTC로 수정되고 날짜 부분이 삭제됩니다. 참고 자료에는 표준 시간대 문제가 언급되어 있지만 날짜 폐기에 대해서는 아무런 언급이 없습니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

답변

6

확인. 나는 그것을 이해했다. DateFormat의

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

만들기 및

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

수정에게 날짜 시간 생성자에게 그것을 전달합니다. 기본적으로 시간 부분 만 찍은 것 같습니다. 내 멍청한 걸 미안해.

+0

새 대답을 추가하지 마십시오. 원본을 편집하십시오. – duffymo

+1

또는이 대답을 받아 들여서 당신이 문제를 발견했음을 명확하게합니다 –

+0

방금 ​​전에 저의 비슷한 문제를 해결했습니다 :) –

0

POI는 내가 권하고 싶은 답변이 아닙니다. JExcel은 그것을 관리 할 수 ​​있습니다. 나는 그 셀에 타입을 설정 한 곳을 보지 못합니다. DateFormats을보십시오.

Excel을 사용하는 경우 문제가 동일합니다. 해당 형식이 설정되지 않은 셀에 날짜를 입력하면 예기치 않은 동작이 발생합니다.

+0

jxl.write.DateTime 유형의 WritableCell을 만들었습니다. 적절한 유형을 설정할 것으로 예상했습니다 (jxl.write.Number는 유형을 숫자로 설정 함). 그러나 DateFormat도 필요합니다. 나는 그것이 단지 디스플레이를 제어한다고 생각했지만 java.util.Date의 어떤 부분이 쓰여지는지에 영향을 미친다. –

관련 문제