2012-01-29 7 views
7

ढूंढ सकें। मैं एक स्प्रेडशीट में एक सेल ढूंढ रहा हूं जिसमें स्ट्रिंग 'कुल' है और फिर उस पंक्ति का उपयोग करें जिसमें उस सेल को दूसरे सेल में कुल मान मिलना है जो हमेशा एक ही सेल/कॉलम (0 आधारित इंडेक्स में 10 वां सेल) होता है।जावा पीओआई: एक स्ट्रिंग मान के साथ एक्सेल सेल कैसे ढूंढें और उस स्थिति का उपयोग करने के लिए अपनी स्थिति (पंक्ति) प्राप्त करें ताकि वह अन्य स्थिति

मैं निम्नलिखित कोड है, जो कोई त्रुटि (सिंटेक्स) है, लेकिन findCell विधि नहीं लौटा रहा है है ROWNUM मूल्य:

public static void main(String[] args) throws IOException{ 

     String fileName = "C:\\file-path\\report.xls"; 
     String cellContent = "Total"; 
     int rownr=0, colnr = 10; 

     InputStream input = new FileInputStream(fileName); 

     HSSFWorkbook wb = new HSSFWorkbook(input); 
     HSSFSheet sheet = wb.getSheetAt(0); 

     rownr = findRow(sheet, cellContent); 

     output(sheet, rownr, colnr); 

     finish(); 
    } 

    private static void output(HSSFSheet sheet, int rownr, int colnr) { 
     /* 
     * This method displays the total value of the month 
     */ 

     HSSFRow row = sheet.getRow(rownr); 
     HSSFCell cell = row.getCell(colnr); 

       System.out.println("Your total is: " + cell);   
    } 

    private static int findRow(HSSFSheet sheet, String cellContent){ 
     /* 
     * This is the method to find the row number 
     */ 

     int rowNum = 0; 

     for(Row row : sheet) { 
      for(Cell cell : row) { 

       while(cell.getCellType() == Cell.CELL_TYPE_STRING){ 

        if(cell.getRichStringCellValue().getString() == cellContent);{ 

          rowNum = row.getRowNum(); 
          return rowNum; 
        } 
       } 
      } 
     }    
     return rowNum; 
    } 

    private static void finish() { 

     System.exit(0); 
    } 
} 

उत्तर

17

इस विधि ठीक आपकी समस्या का समाधान है।

+0

आपको बहुत धन्यवाद @ एमएसआई। सुझाए गए कोड ने समस्या को ठीक किया, यह पूरी तरह से काम किया। मैं प्रोग्रामिंग के लिए अपेक्षाकृत नया हूं, आपसे पूछ सकता हूं: 1. आपने वक्तव्य क्यों बदल दिया और 2. लूप के लिए वापसी क्यों है = 0. धन्यवाद! – lv10

+1

जब आप 'while' लूप का उपयोग करते हैं तो आप मानते हैं कि' कुल-सेल 'से बाईं ओर मौजूद सभी कक्ष स्ट्रिंग से भरे हुए हैं। उदाहरण के लिए इस तरह की कोशिकाएं: | | 1 | कुल | असफल होने के साथ असफल होगा, क्योंकि 'while' 1 के मूल्य पर टूट जाएगा। वापस लौटने पर 0 'कुल-सेल' नहीं मिलेगा। – msi

+1

दो तारों की तुलना करने के लिए आपको बराबर विधि का उपयोग करना चाहिए। '==' का उपयोग आदिम प्रकारों की तुलना करने के लिए किया जाता है, वस्तुओं नहीं। और getString() एक ऑब्जेक्ट देता है। यदि आप स्ट्रिंग्स के बारे में अधिक जानना चाहते हैं, तो स्ट्रिंग पूल और इंटर्न विधि के बारे में पढ़ें। यह वह जगह है जहां आप '==' का उपयोग करके तुलना करते समय मामलों को पा सकते हैं। मैंने ट्रिम विधि का भी उपयोग किया है क्योंकि उपयोगकर्ता इनपुट स्ट्रिंग के अंत में कुछ अतिरिक्त रिक्त स्थान रखना पसंद करते हैं। – msi

2

आप अपने if बयान के बाद अर्धविराम है जिसका मतलब है कि आपके if नहीं होगा काम:

if(cell.getRichStringCellValue().getString() == cellContent);{ 

यहां तक ​​कि अगर यह आपकी समस्या का समाधान नहीं होगा, मुझे लगता है कि अपने while बयान यहाँ के लिए उचित नहीं हो सकता है;

while(cell.getCellType() == Cell.CELL_TYPE_STRING) 

जहां तक ​​मुझे याद है, पीओआई में अन्य सेल प्रकार हैं। इन लाइनों पर ब्रेकपॉइंट डालने का प्रयास करें और उन्हें जांचें कि उनके पास सही सेलटाइप है या नहीं।

private static int findRow(HSSFSheet sheet, String cellContent) { 
    for (Row row : sheet) { 
     for (Cell cell : row) { 
      if (cell.getCellType() == Cell.CELL_TYPE_STRING) { 
       if (cell.getRichStringCellValue().getString().trim().equals(cellContent)) { 
        return row.getRowNum(); 
       } 
      } 
     } 
    }    
    return 0; 
} 

ध्यान रखें कि आपके colnr अभी भी एक निश्चित मूल्य है रखें:

+0

आपको बहुत बहुत धन्यवाद। आपका सुझाव सही था, जबकि वक्तव्य में कुछ गलत था। मैंने इसे हटा दिया और इसे @ एमएसआई द्वारा नीचे दिए गए एक कथन के लिए बदल दिया। – lv10

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