2009-05-14 11 views
30

का उपयोग कर एक्सेल सेल से दिनांक मूल्यों को पढ़ना मैं जावा में अपने एक्सेल मैनिपुलेशन के लिए पीओआई एचएसएसएफ एपीआई का उपयोग कर रहा हूं। मेरे पास एक्सेल सेल में से एक में "8/1/2009" दिनांक मूल्य है और जब मैं एचएसएसएफ एपीआई का उपयोग करके इस मान को पढ़ने की कोशिश करता हूं, तो यह सेल प्रकार को न्यूमेरिक के रूप में पहचानता है और मेरी तिथि का 'डबल' मान देता है। नीचे नमूना कोड देखें:()पीओआई एचएसएसएफ एपीआई

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 देता है और इस तरह इस कोड को दोगुना करने के लिए तारीख धर्मान्तरित! :(

वहाँ किसी भी तरह से के रूप में यह HSSF POI में है तारीख को पढ़ने के लिए है

उत्तर

37

आप पर एक नज़र ले सकता है:?

HSSFDateUtil.isCellDateFormatted() 

अधिक जानकारी के लिए POI भयानक स्प्रेडशीट स्वरूप API देखें HSSFDateUtil पर:

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

भी लौटने एक्सेल getExcelDate() के लिए कुछ सहायक तरीके प्रदान कि और जावा तारीखें ०१२३५९६७१२४५। तुम्हें पता है, अलग अलग तिथि प्रारूप हालांकि कुछ हद तक सावधान रहने की जरूरत है ...

+8

मैं उन POI डेवलपर के लिए अपने स्रोत कोड टिप्पणी की ... Jon

+2

DateUtil.isCellDateFormatted कॉलिंग() HSSFs और XSSFs से अपने कोड को मुक्त कराने के रास्ते में एक कदम आगे हो जाएगा चाहते हैं। एक्सएलएस/एक्सएलएसएक्स आश्रित एचएसएसएफ/एक्सएसएसएफ बच्चों के बजाय वैश्विक माता-पिता का उपयोग करके, आप अपना कोड बहुत सार्वभौमिक बना सकते हैं। –

6

एक्सेल संख्या के रूप में दिनांक और समय व्यवहार करता है ... जॉन बेहतर कहा, तो मैं उसे यहाँ गूंज नहीं होगा ...

हालांकि क्या आप प्रश्न में डाल दिया है के लिए नमूना कोड http://poi.apache.org/spreadsheet/quick-guide.html#CellContents

+0

लिंक – nantitv

6

पर है आप POI 3.5 का उपयोग कर आप निम्नलिखित

cell.getDateCellValue() विधि का उपयोग कर सकते हैं। यह एक्सेल 2007 के लिए भी काम करेगा।

20

यदि आप Excel फ़ाइल में उसी प्रारूप में दिनांक का संदर्भ देना चाहते हैं, तो आपको CellDateFormatter का उपयोग करना चाहिए। नमूना कोड:

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

लिंक के लिए धन्यवाद इस तरह आपको कच्चे कॉलम मान मिलते हैं जो समझ में आता है ... – Makky

0

के बाद से POI 3.15 beta3 कुछ कार्यों deprecated हैं। आप डेटा प्रारूप की जांच कर सकते हैं और जावा Date के रूप में पुनर्प्राप्त कर सकते हैं।

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