2009-05-14 16 views
30

Java'daki excel manipülasyonları için POI HSSF API'sini kullanıyorum. Excel hücremin birinde "8/1/2009" bir tarih değerine sahibim ve bu değeri HSSF API kullanarak okumaya çalışırken, hücre türünü Sayısal olarak algılar ve tarihimin 'Çift' değerini döndürür. Aşağıdaki örnek kodu Bkz:POI HSSF API kullanarak excel hücresinden tarih değerleri okuma

cell = row.getCell(); // date in the cell '8/1/2009' 
switch (cell.getCellType()) { 

case HSSFCell.CELL_TYPE_STRING: 
    cellValue = cell.getRichStringCellValue().getString(); 
    break; 
case HSSFCell.CELL_TYPE_NUMERIC: 
    cellValue = new Double(cell.getNumericCellValue()).toString(); 
    break; 
default: 
} 

Cell.getCellType() NUMERIC_TYPE döner ve böylece bu kod ikiye katlama tarih dönüştürür! :(

o HSSF POI olduğu gibi tarih okumak için herhangi bir yolu var mı

cevap

37

Sen bakmak olabilir:!? Daha fazla bilgi için POI Korkunç Çizelge Biçimi API bölümüne bakın

HSSFDateUtil.isCellDateFormatted() 

HSSFDateUtil tarih: Ayrıca Excel getExcelDate() döndürmek için bazı yardımcı yöntemler sağlar

http://poi.apache.org/apidocs/org/apache/poi/hssf/usermodel/HSSFDateUtil.html

ve Javabüyük. Ancak ...

Sen

Excel sayı olarak tarihleri ​​ve saatleri davranır
+8

O POI geliştiricileri ... kaynak kodlarını açıklama yapacağı Jon

+2

DateUtil.isCellDateFormatted çağrılması() HSSFs ve XSSFs sizin kodu kurtararak yolunda bir adım önde olacak diliyorum. XLS/XLSX bağımlı HSSF/XSSF çocukları yerine global ebeveynleri kullanarak, kodunuzu evrensel hale getirebilirsiniz. –

6

yer almaktadır. Bu da 2007 excel için çalışacaktır.

20

Tarihte aynı biçimde Excel dosyasındaki gibi başvurmak isterseniz, CellDateFormatter öğesini kullanmalısınız. Örnek kod:

CellValue cValue = formulaEv.evaluate(cell); 
double dv = cValue.getNumberValue(); 
if (HSSFDateUtil.isCellDateFormatted(cell)) { 
    Date date = HSSFDateUtil.getJavaDate(dv); 

    String dateFmt = cell.getCellStyle().getDataFormatString(); 
    /* strValue = new SimpleDateFormat(dateFmt).format(date); - won't work as 
    Java fmt differs from Excel fmt. If Excel date format is mm/dd/yyyy, Java 
    will always be 00 for date since "m" is minutes of the hour.*/ 

    strValue = new CellDateFormatter(dateFmt).format(date); 
    // takes care of idiosyncrasies of Excel 
} 
+0

Bu sayede anlamsız ham sütun değeri elde edersiniz ... – Makky

0

POI 3.15 beta3 yana bazı işlevler deprecated bulunmaktadır. Veri formatını kontrol edebilir ve Java Date olarak alabilirsiniz.

SimpleDateFormat format = new SimpleDateFormat(""); 
String cellValue; 
if(cell != null && cell.getCellTypeEnum() != CellType.STRING && 
    cell.getCellTypeEnum() == CellType.NUMERIC && DateUtil.isCellDateFormatted(cell)){ 

    cellValue = format.format(cell.getDateCellValue()); 
} 
İlgili konular