2012-05-16 12 views
10

के रूप में दिनांक मूल्य पढ़ना मैं एक्सेल फ़ाइल पढ़ने के लिए अपाचे पोई लाइब्रेरी का उपयोग कर रहा हूं। पासवर्ड सेल पढ़ने के दौरान मैं अटक गया हूँ। यदि उपयोगकर्ता पासवर्ड सेल में पासवर्ड के रूप में दिनांक देता है यानी 16/05/2012। मैं इस मान को "41045" के रूप में पढ़ रहा हूं जबकि मान "16/05/2012" होना चाहिए। यह मेरा कोड है:एक्सेल सेल से स्ट्रिंग

cell = row.getCell(); // date in the cell password '16/05/2012' 
switch (cell.getCellType()) { 

case HSSFCell.CELL_TYPE_STRING: 
    cellValue = cell.getRichStringCellValue().getString(); 
    break; 
case HSSFCell.CELL_TYPE_NUMERIC: 
    if(cellCount == TEMPLATE_PASSWORD) {// if cell is password 
     cell.setCellType(Cell.CELL_TYPE_STRING); 
     cellValue = cell.getRichStringCellValue().getString(); // value read is 41045 and not "16/05/2012" 
    } 
    break; 
default: 
} 

क्या कोई इस पर सहायता कर सकता है?

धन्यवाद।

+0

इस धागे पर एक नज़र डालें, यह आपकी समस्या के साथ लगभग समान है। http://stackoverflow.com/questions/3148535/how-to-read-excel-cell-having-date-with-apache-poi –

+0

@mashhur आपके लिंक पर, मेरी आवश्यकता के अनुसार कोई समाधान नहीं है। –

+0

मुझे लगता है कि आपको स्ट्रिंग के बजाय संख्या प्राप्त होती है क्योंकि सेल का प्रकार संख्यात्मक है। क्या आप सुनिश्चित हैं कि संख्यात्मक प्रकार पासवर्ड सेल के लिए सही है? – ImLearning

उत्तर

14

वर्ग आप POI में के लिए देख रहे DataFormatter

जब Excel फ़ाइल लिखता है, कुछ कोशिकाओं, शाब्दिक तार के रूप में जमा हो जाती है, जबकि अन्य लोगों (तिथियों सहित) संख्या के रूप में जमा हो जाती है। बाद के लिए, सेल का प्रतिनिधित्व करने वाला एक फ़्लोटिंग पॉइंट मान फ़ाइल में संग्रहीत होता है, इसलिए जब आप सेल के मान के लिए पीओआई पूछते हैं जो वास्तव में है।

कभी-कभी हालांकि, विशेष रूप से टेक्स्ट निष्कर्षण (लेकिन हमेशा नहीं) करते समय, आप सेल वैल्यू को Excel में ऐसा करना चाहते हैं। यह वास्तव में एक स्ट्रिंग (उदाहरण के लिए गैर पूर्ण स्थान पैडिंग) में प्राप्त करना हमेशा संभव नहीं है, लेकिन डेटाफॉर्मेटर क्लास आपको बंद कर देगा।

यह भी ध्यान दें कि एक्सेल में, दिनांक ~ 1 9 00 के बाद से फ़्लोटिंग पॉइंट नंबर के रूप में संग्रहीत हैं, यही कारण है कि आप एक संख्या नहीं देख रहे हैं। डेटाफॉर्मेटर (या इसी तरह) को

+0

ठीक है, मैंने डेटाफॉर्मेटर की जांच की है, मैं दिनांक स्ट्रिंग यानी "41045" प्रारूपित करूंगा " 16/05/2012 "। लेकिन क्या होगा यदि उपयोगकर्ता "05/16/2012" के रूप में स्ट्रिंग में प्रवेश करता है? यहां मेरे पास एक ही तिथि स्ट्रिंग होगी "41045" लेकिन तर्क के अनुसार यह "16/05/2012" में परिवर्तित हो जाएगा और नहीं "05/16/2012"। या मुझे कैसे पता चलेगा कि उपयोगकर्ता किस प्रारूप में प्रवेश करता है? –

+0

जब उपयोगकर्ता सेल में मान डालता है, तो उस पर एक प्रारूप लागू होता है (या तो स्वचालित रूप से या स्पष्ट रूप से), जिसे इसे प्रस्तुत करने के लिए उपयोग किया जाता है। डेटाफॉर्मेटर बस उस प्रारूप के आधार पर सेल प्रस्तुत करेगा। – Gagravarr

4

सेल मान को प्रीफ़िक्स करना 'xls में सहेजते समय इसे एक स्ट्रिंग सेल में प्रस्तुत करता है। तो, जो भी आप उस सेल से पढ़ते हैं उसे एक स्ट्रिंग के रूप में माना जाएगा और जैसा पढ़ा जाएगा।

+1

इस समाधान के लिए उपयोगकर्ता की आवश्यकता होती है, जो डेटा में प्रवेश करता है, प्रोग्राम के लिए यह जानने और याद रखने के लिए (जिसे वे शायद नहीं जानते) – Attila

5

एक्सेल शीट में दर्ज की गई सटीक दिनांक फ़ॉर्मेट प्राप्त करने के लिए नीचे दिए गए कोड का उपयोग करने के लिए उपयोग करें।

DataFormatter df = new DataFormatter(); 
stringCellValue = df.formatCellValue(cell); 
+0

यही वह है जिसे मैं व्यावहारिक उत्तर देता हूं। धन्यवाद! –

संबंधित मुद्दे