2015-01-29 2 views
0

두 번 호출 할 때이 함수에서 데이터를 가져 오는 데 문제가 있습니다. 이 함수는 Excel 시트에서 가져온 모든 행의 arrayList를 반환합니다. 함수를 처음 호출 할 때 정확한 행 (표제 행과 종료 행이있는 모든 행)을 얻습니다.Excel에서 데이터를 가져 오는 문제 (Java 사용)

private static List<String[]> getDataFromXLS(String excelPath) { 

    FileInputStream fis; 
    Workbook workbook; Sheet sheet; XSSFRow row; 
    Iterator<Row> rows; 
    XSSFCell cell; 
    List<String[]> allExcelRows = new ArrayList<String[]>(); 
    String[] xlsRow; 
    columnNames = new LinkedHashMap<Integer, String>(); 
    paramNames = new LinkedHashMap<String, Integer>(); 
    int totalColumnCount = 0; 
    int rowNumber = 1; 

    try { 
     fis = new FileInputStream(new File(excelPath)); 
     workbook = WorkbookFactory.create(fis); 
     sheet = workbook.getSheet("TestData"); 
     rows = sheet.rowIterator(); 

     while (rows.hasNext()) {   

      row = ((XSSFRow) rows.next()); 
      if (rowNumber == 1) { 
       //based on amount of parameters on first xls row 
       totalColumnCount = row.getLastCellNum(); 
      } 

      xlsRow = new String[totalColumnCount]; 

      //check which column is TestType 
      //iterate through all the columns 
      for (int columnNumber=0; columnNumber<totalColumnCount; columnNumber++) { 

       cell = row.getCell(columnNumber, Row.CREATE_NULL_AS_BLANK); 
       if (getCellValue(cell).trim().toLowerCase().trim().equals("testtype")){ 
        testTypeColumnIndex = columnNumber; //this is Testtype index 
        break; 
       } 
      } 

      if (rowNumber != 1) {     
       for(int columnNumber=0; columnNumber<totalColumnCount; columnNumber++) { 
        cell = row.getCell(columnNumber, Row.CREATE_NULL_AS_BLANK);      

        //read only rows before exit 
        if (columnNumber == testTypeColumnIndex && getCellValue(cell).trim().toLowerCase().trim().equals("exit")){ 
         reachedExit = true; 
         break; 
        } 
        xlsRow[columnNumber] = getCellValue(cell).trim(); 
       } 

       //reached exit? 
       if (reachedExit) { 
        break; 
       } 
       allExcelRows.add(xlsRow); 
      } else { 
       //save column names into map 
       for(int columnNumber=0; columnNumber<totalColumnCount; columnNumber++) { 
        cell = row.getCell(columnNumber, Row.CREATE_NULL_AS_BLANK);                  
        columnNames.put(columnNumber, getCellValue(cell).trim()); 
        paramNames.put(getCellValue(cell).trim(), columnNumber); 
       } 
      } 
      rowNumber++; 
     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    fis.close(); 
    return allExcelRows; 
} 

답변

0

오전 여기 추측의 비트를 복용 : 나는 함수를 호출 할 두 번째 시간은 내가 0

얻을 뭔가 파일이 발생하거나 용지가 두 번째 시간을 만든 것, 여기에 코드입니다 하지만 문제는 reachedExit 클래스 수준의 부울 메서드의 시작 부분에 다시 설정되지 않는다고 생각합니다. 당신이 그것을 두 번째 시간을 호출 할 때 따라서이 코드 블록은 실행 :

//reached exit? 
if (reachedExit) { 
    break; 
} 

.... 아무것도 당신은 절대적으로 오른쪽에 자리하고 allExcelRows

+0

에 추가되지됩니다 것을 의미한다. 이제 작동합니다. 많은 thanks – Adam

+0

당신을 진심으로 환영합니다. 문제가 해결되었음을 나타내는 답을 수락 할 수 있습니까? –

+0

죄송합니다. 어떻게해야합니까? – Adam

관련 문제