2013-08-06 20 views
7

नमस्ते हम अपने जावा कार्यक्रम में अपाचे poi का उपयोग कर xls और xlsx फ़ाइल पढ़ रहे हैं, समस्या यह है कि हम दो कारणों से शून्य सूचक अपवाद प्राप्त कर रहे हैं .. पहला 1 खाली कक्ष है जिसे हम पहले से ही खाली कर चुके हैं हल किया गया और दूसरा एक ऐसा है जब हम एक निश्चित कॉलम चुन रहे हैं जिसमें कोई रिकॉर्ड नहीं है ..शून्य सूचक अपवाद apache poi

हमारे प्रोग्राम एक्सेल फ़ाइल के पथ के लिए पूछते हैं तो फ़ाइल की विशिष्ट शीट संख्या और विशिष्ट कॉलम संख्या चादर आप पढ़ना चाहते हैं यहाँ .. xls फ़ाइल को पढ़ने के लिए कोड

public void readXLSFile()throws IOException{ 
    InputStream ExcelFileToRead = new FileInputStream(path); 
    HSSFWorkbook wb = new HSSFWorkbook(ExcelFileToRead); 


    HSSFSheet sheet=wb.getSheetAt(sheetname); 
    HSSFRow row; 
    HSSFCell cell; 

    Iterator rows = sheet.rowIterator(); 

      list1.clear(); 

    while (rows.hasNext()) 
    { 
        headers.clear(); 
     row=(HSSFRow) rows.next(); 

       // Iterator cells = row.cellIterator(); 

        headers.add("contents"); 


      cnt = cnt+1; 

      cell = row.getCell(cols); 
      if (cell.getCellType() == HSSFCell.CELL_TYPE_STRING) 
      { 
       //System.out.println(cell.getStringCellValue()+"(string)"); 
       list.add(cell.getStringCellValue()); 
            d.add(cell.getStringCellValue()); 
            list1.add(new KeyValuePair(cell.getStringCellValue(),"")); 
      } 
      else if(cell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC) 
      { 
       //System.out.println(cell.getNumericCellValue()+"(numeric)"); 
       double num = cell.getNumericCellValue(); 
       String num2 = String.valueOf(num); 
       list.add(num2); 
            d.add(num2); 
            list1.add(new KeyValuePair(num2,"")); 

      } 
      else if(cell.getCellType() == HSSFCell.CELL_TYPE_BOOLEAN) 
      { 
       //System.out.println(cell.getBooleanCellValue()+"(boolean)"); 
       String bool = String.valueOf(cell.getBooleanCellValue()); 
       list.add(bool); 
            d.add(bool); 
            list1.add(new KeyValuePair(bool,"")); 
      } 
      else 
      { 
       //U Can Handel Boolean, Formula, Errors 
      } 


     //System.out.println(); 
    } 
     arrey = list.toArray(new String[list.size()]); 
        data.add(d); 
        // System.out.println(data); 


        model = new DefaultTableModel(); 
        table_1.setModel(model); 


        table_1.setModel(model); 
         model.setColumnIdentifiers(new String[] {"row","contents"}); 

        for (KeyValuePair p : list1){ 


         int nor=table_1.getRowCount(); 

         int n2 = nor +1; 
         n1 = Integer.toString(n2); 
        // model.addColumn(new String [] {n1}); 


         model.addRow(new String[] {n1,p.key, p.value}); 


        } 
        // model.addColumn(new String[] {n1}); 

} 

चर SHEETNAME एक्सेल फाइल की चादर संख्या के लिए है बेर

HSSFSheet sheet=wb.getSheetAt(sheetname); 

और चर कॉलम विशिष्ट स्तंभ के लिए है आप

cell = row.getCell(cols); 

पढ़ने के लिए हम हर चादर के पहले कॉलम और भी दूसरी चादर के दूसरे स्तंभ पढ़ सकते हैं चाहते हैं, लेकिन जब मैं संपादित अपने परीक्षण कार्यक्रम अब फाइल केवल हर शीट .. त्रुटि के पहले कॉलम पढ़ सकते है नल पॉइंटर exception..wish आप

+1

क्या आप अपवाद के स्टैक ट्रेस को प्रिंट कर सकते हैं। अगर हम जान सकें कि कौन सा कथन वास्तव में अपवाद पैदा कर रहा है तो मैं मदद करूंगा। –

+0

यह थोड़ा उलझन में है ... आप 'शीटनाम' का उपयोग कर रहे हैं जो 'HSSFSheet शीट = wb.getSheetAt (शीटनाम) के साथ एक स्ट्रिंग प्रतीत होता है; '। 'getSheetAt' हमेशा शीट इंडेक्स के लिए संख्यात्मक मान स्वीकार कर रहा है। कृपया पुष्टि करें। – Sankumarsingh

+0

यह एकमात्र त्रुटि है जो मुझे java.lang.NullPointerException रास्ते में, मैं ऊपर वर्णित विधि को घेरने के तरीके से घिरा हुआ हूं .. –

उत्तर

5

रेयेस अग्रिम धन्यवाद मदद कर सकता है,

मुद्दा यह है कि सेल परीक्षण नहीं होने पर आप कभी परीक्षण नहीं करते!

if (cell == null) 
{ 
    System.out.println("Cell is Empty in Column:" + cols); 

} else if (cell.getCellType() == HSSFCell.CELL_TYPE_STRING) 
{ 
    //code 
} 

एक सामान्य बात के रूप में, आप सावधान Cell.getCellType() समारोह से निपटने जबकि होना चाहिए, के बाद से एक खाली सेल या तो null है या एक CELL_TYPE_BLANK हो सकता है।

मुझे आशा है कि इससे मदद मिलेगी।

+0

यह आपको बहुत धन्यवाद देता है .. –

+2

यदि आप चाहते हैं कि आप एक [MissingCellPolicy] (http://poi.apache.org/apidocs/org/apache/poi/ss/usermodel/Row.MissingCellPolicy.html) निर्दिष्ट कर सकते हैं नियंत्रित करें कि कितनी रिक्त या गायब कोशिकाएं आपके पास लौट आती हैं – Gagravarr

1

सेल NullPoiterException से बचने के लिए यह मेरा तरीका है।
क्या आप इसे आजमा सकते हैं। सौभाग्य!

/** 
    * Get string value of {@link Cell} object 
    * 
    * @param cell 
    *   {@link Cell} object 
    * @return String value of {@link Cell} object 
    */ 
    private static String getCellValueString(Cell cell) { 
     String value=""; 
     if(cell!=null) { 
      switch(cell.getCellType()){ 
       case Cell.CELL_TYPE_BOOLEAN: 
        value=String.valueOf(cell.getBooleanCellValue()); 
        break; 
       case Cell.CELL_TYPE_NUMERIC: 
        value=BigDecimal.valueOf(
         cell.getNumericCellValue()).toPlainString(); 
        break; 
       case Cell.CELL_TYPE_STRING: 
        value=String.valueOf(cell.getStringCellValue()); 
        break; 
       case Cell.CELL_TYPE_FORMULA: 
        value=String.valueOf(cell.getCellFormula()); 
        break; 
       case Cell.CELL_TYPE_BLANK: 
        value=""; 
        break; 
      } 
     } else { 
      logger.error("Cell is null"); 
     } 
     return value.trim(); 
    } 
संबंधित मुद्दे