2012-04-01 14 views
6

मैं अपाचे पीओआई जावा का उपयोग कर रहा हूं और पंक्तियों की कुल संख्या प्राप्त करना चाहता हूं जो खाली नहीं हैं। मैंने अपने सभी स्तंभों के साथ पूरी पंक्ति को सफलतापूर्वक संसाधित किया। अब मुझे लगता है कि मुझे कई पंक्तियों के साथ एक्सेल शीट मिलती है, न कि एक पंक्ति ... तो इसके बारे में कैसे जाना है? मैं पंक्तियों की कुल संख्या (int n) और तब लूप प्राप्त करने के बारे में सोच रहा था जब तक कि मैं < = n लेकिन सुनिश्चित नहीं हूं। Apache POI संस्करण 3.8:अपाचे पीओआई पंक्ति संख्या

सुझाव बहुत स्वागत :)

नोट कर रहे हैं। मैं एक्सएलएसएक्स प्रारूप से निपट नहीं रहा हूं ... केवल एक्सएलएस।

हाँ मैं इस कोड की कोशिश की लेकिन बदले में 20 हो गया .... जो मैं केवल 5 पंक्तियाँ

FileInputStream fileInputStream = new FileInputStream("COD.xls"); 
      HSSFWorkbook workbook = new HSSFWorkbook(fileInputStream); 
      HSSFSheet worksheet = workbook.getSheet("COD"); 
      HSSFRow row1 = worksheet.getRow(3); 
      Iterator rows = worksheet.rowIterator(); 
      int noOfRows = 0; 
      while(rows.hasNext()) { 
       HSSFRow row = (HSSFRow) rows.next(); 
       noOfRows++;     
      } 
      System.out.println("Number of Rows: " + noOfRows); 
+1

आपने वास्तव में क्या प्रयास किया है और क्या काम नहीं कर रहा है? क्या आप कुछ कोड प्रदान कर सकते हैं? – nansen

+1

यह अच्छा नहीं है लेकिन मुझे लगता है कि यह कैसे किया जाता है। आप HSSFSheet को सीधे फ़ोरैच लूप में उपयोग कर सकते हैं क्योंकि यह Iterable लागू करता है। वे इसे भयानक स्प्रेड शीट प्रारूप (एचएसएसएफ) को कुछ भी नहीं कहते हैं :(हो सकता है कि आप अपेक्षित 5 पंक्तियों के बजाय 20 प्राप्त कर रहे हों क्योंकि आपके पास शून्य मानों के साथ पंक्तियां हैं। आपको कोशिकाओं पर भी पुनरावृत्ति करना होगा और सभी पंक्तियों को छोड़ना होगा केवल शून्य मानों के साथ। – nansen

+0

मुझे लगता है कि मैंने इसे हल किया है ... क्योंकि मैंने एक्सेल शीट में मेनू छोड़ दिया है, इसलिए उन सूचियों में कहीं भी मौजूद हैं। अब यह काम कर रहा है और सही पंक्ति संख्या प्रदर्शित कर रहा है –

उत्तर

6
for (int i = 0; i <= sheet.getLastRowNum(); i++) { 
    if ((tempRow = sheet.getRow(i)) != null) { 
      //Your Code Here 
    } 
} 
+0

यहां tempRow क्या है। – DEADEND

+0

इसकी बस एक चर। आप इसे छोड़ सकते हैं। – Sorter

5

समस्या यह है कि POI शारीरिक पंक्तियों के रूप में खाली पंक्तियों पर विचार करती है दे दिया है संभव नहीं है। यह कभी-कभी एक्सेल में होता है और जब वे आंखों के लिए दृश्यमान नहीं होते हैं, तो पंक्तियां निश्चित रूप से मौजूद होती हैं।

यदि आप एक्सेल शीट खोलना चाहते हैं और अपने डेटा के नीचे सब कुछ चुनना चाहते हैं, तो इसे हटाएं (मुझे पता है कि यह खाली दिख रहा है, लेकिन इसे वैसे भी करें), पीओआई सही नंबर वापस कर देगा।

0

आप getLastRowNum() के अलावा PHysicalNumberOfRows() प्राप्त करना चाहते हैं?

0

आप पंक्तियों जो इस का उपयोग करते हुए खाली नहीं हैं से अधिक पुनरावृति कर सकते हैं:

Iterator<Row> rowIterator = sheet.rowIterator(); 
     while (rowIterator.hasNext()) { 
     Row row = (Row) rowIterator.next(); 
     // Your code here 
     } 

धन्यवाद

0
worksheet.getLastRownNum() // *base index 0* 

इस विधि से आप पंक्ति को भरने हो सकता है जहां अंतिम पंक्ति संख्या दे देंगे, यहां तक ​​कि यदि आपने 5 पंक्तियों को भर दिया है, तो ऐसे मामले हो सकते हैं जिन्हें आपने शेष 15 पंक्तियों में या 21 वीं पंक्ति में कुछ रिक्त स्थान भर दिए हों, जिसके कारण यह अंतिम पंक्ति संख्या 20 के रूप में दे रहा है।

ऐसे मामले हो सकते हैं जो प्रत्येक 5 वीं पंक्ति में आप डेटा दर्ज करते हैं (1 से शुरू होते हैं), तो आपकी 5 वीं प्रविष्टि 21 वीं पंक्ति में होगी, इसलिए, यदि आप इस विधि का उपयोग करते हैं, तो आपको परिणामस्वरूप 20 मिलेंगे।

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