2013-10-16 18 views
9

में प्रस्तुत किया गया था, मैं वर्तमान में एक परियोजना पर काम कर रहा हूं जो अपाचे पीओआई का उपयोग करके एक्सेल फ़ाइल पढ़ता है।सेल मान प्राप्त करें जैसे यह एक्सेल

मेरा काम सरल लगता है, मुझे बस सेल मान प्राप्त करने की आवश्यकता है क्योंकि यह एक्सेल फ़ाइल में प्रदर्शित होता था। मैं सेल के सेल प्रकार के आधार पर एक स्विच स्टेटमेंट करने के बारे में जानता हूं। लेकिन अगर डेटा

9,000.00

की तरह कुछ है POI जब मैं getNumericCellValue() करना मुझे 9000.0 देता है। जब मैं सेल को स्ट्रिंग प्रकार के रूप में मजबूर करता हूं और getStringCellValue() करता हूं तो यह मुझे 9000 देता है। मुझे जो चाहिए वह डेटा है जैसे यह एक्सेल में प्रस्तुत किया गया था।

मुझे कुछ पोस्ट DataFormat कक्षा का उपयोग करने के लिए कह रही है लेकिन मेरी समझ के अनुसार, यह आपके कोड को उस प्रारूप के बारे में जागरूक होने की आवश्यकता है जो सेल के पास है। मेरे मामले में, मुझे उस प्रारूप के बारे में पता नहीं है जिस पर सेल हो सकता है।

तो, मैं सेल मूल्य को कैसे प्राप्त कर सकता हूं जैसे यह एक्सेल में प्रस्तुत किया गया था?

उत्तर

16

एक्सेल भंडार कुछ कोशिकाओं, लेकिन अधिकांश। आपको क्या करने की आवश्यकता होगी, वे स्वरूपण नियम संख्यात्मक कोशिकाओं के खिलाफ चलते हैं, जो Excel में किए गए तारों का उत्पादन करने के लिए करते हैं। -

सौभाग्यवश, Apache POI ऐसा लिए एक वर्ग has DataFormatter

सभी आप करते की जरूरत तरह कुछ है:

Workbook wb = WorkbookFactory.create(new File("myfile.xls")); 
DataFormatter df = new DataFormatter(); 

Sheet s = wb.getSheetAt(0); 
Row r1 = s.getRow(0); 
Cell cA1 = r1.getCell(0); 

String asItLooksInExcel = df.formatCellValue(cA1); 

फ़र्क नहीं पड़ता कि सेल प्रकार है DataFormatter स्वरूपित जाएगा एक्सेल

+0

इसका काम! धन्यवाद। उपरोक्त + उत्तर स्वीकार किया गया। – Bnrdo

+0

मेरे लिए काम किया! धन्यवाद! – user3471194

0

उपयोग CellType आप हर चीज

if (cellValue.getCellType() == Cell.CELL_TYPE_NUMERIC) 

जांच कर सकते हैं // cellValue है संख्यात्मक

if (cellValue.getCellType() == Cell.CELL_TYPE_STRING) 

// cellValue एक स्ट्रिंग

तारीख भी संख्यात्मक रूप में दिया जाता है, उस समय दिए गए सेल की तारीख dateUtil

का उपयोग करके दिनांक की तारीख है या नहीं
if (DateUtil.isCellDateFormatted(cellData)) 
उन्हें करने के लिए लागू विशेष प्रारूपण नियमों के साथ संख्या के रूप में

के बाद आप तारों के रूप में की तारीख में cellvalue में बदल सकते हैं

+1

में लागू नियमों का उपयोग करके यह आपके लिए सबसे अच्छा है, मैंने पहले ही यह किया है, मेरी समस्या यह है कि डेटा का मूल प्रारूप पुनर्स्थापित नहीं किया गया है। – Bnrdo

+0

मैंने getStringCellValue() द्वारा स्ट्रिंग के रूप में संख्यात्मक मान प्राप्त करने का प्रयास किया, मुझे अपवाद मिला। इसके लिए मैंने केवल यह दिया। स्ट्रिंग को संख्यात्मक के रूप में प्राप्त करना संभव है। – newuser

+0

एक नज़र डालें http://stackoverflow.com/questions/1072561/how-can-i-read-numeric-strings-in-excel-cells-as-string-not-numbers-with-apach – newuser

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