2014-04-24 4 views
0

를 사용하여 열 중 하나에 데이터에서 엑셀 기반의 특정 행을 읽을 수 있습니다 :어떻게 그냥 예를 들어 다음과 같은 형식의 엑셀이 자바

FileName,Type,Size,DateModified,Completed,Count 
File1,text,111,04/22/2014,Yes,1 
File2,text,222,04/23/2014,No,2 
File3,word,333,04/24/2014,No,3 
File4,excel,444,04/24/2014,Yes,4 
File5,ppoint,555,04/25/2014,Yes,5 

나는하여 엑셀 파일을 읽는 프로그램이 다음 행의 열에 의해 행. 하지만 필자가 인쇄해야하는 것은 특정 날짜가있는 행뿐입니다. 이 예제에서는 2014 년 4 월 24 일의 DateModified 행을 인쇄하려고했지만 필터를 적용하거나 조건을 만들 수있는 방법을 찾지 못했습니다.

나는 열 DateModified를 사용하여 필터링을 시도했지만 원하는 날짜를 검색 할 때, 그것은 여전히 ​​열에서 1

자바 코드 전체 행을 인쇄 할 수있는 방법 찾을 수 없습니다 :

HSSFWorkbook workbook = new HSSFWorkbook(file); 
HSSFSheet sheet = workbook.getSheetAt(0); 
Iterator rows = sheet.rowIterator(); 

while(rows.hasNext()) { 
    HSSFRow row = (HSSFRow) rows.next(); 
    System.out.println("\n"); 
    Iterator cells = row.cellIterator(); 

    while(cells.hasNext()) { 
     HSSFCell cell = (HSSFCell) cells.next(); 

       //missing condition 

      if(HSSFCell.CELL_TYPE_STRING==cell.getCellType()) { 
       System.out.print(cell.getStringCellValue()+"  "); 
      } else if (HSSFCell.CELL_TYPE_NUMERIC==cell.getCellType()) { 
       System.out.print(cell.getNumericCellValue()+"  "+cell.getColumnIndex()); 
      } else if(HSSFCell.CELL_TYPE_BOOLEAN==cell.getCellType()) { 
       System.out.print(cell.getBooleanCellValue()+"  "); 
      } else if(HSSFCell.CELL_TYPE_BLANK==cell.getCellType()); 
       System.out.print("BLANK  "); 
    } 

} 

답변

0

Dont 발견 한 즉시 셀 값을 인쇄하십시오. StringBuilder에 추가하고 마지막으로 조건이 일치 할 때만 마지막으로 인쇄하십시오. 이

StringBuilder builder = new StringBuilder(); 
      while(rows.hasNext()) { 
       HSSFRow row = (HSSFRow) rows.next(); 
       System.out.println("\n"); 
       Iterator cells = row.cellIterator(); 
       boolean isValidRow = true; 
       while(cells.hasNext()) { 
        HSSFCell cell = (HSSFCell) cells.next(); 

        //missing condition 
        if (condition match){ 
         isValidRow = false; 
         break; 
        } 

        if(HSSFCell.CELL_TYPE_STRING==cell.getCellType()) { 
         builder.append(cell.getStringCellValue()+"  "); 
        } else if (HSSFCell.CELL_TYPE_NUMERIC==cell.getCellType()) { 
         builder.append(cell.getNumericCellValue()+"  "+cell.getColumnIndex()); 
        } else if(HSSFCell.CELL_TYPE_BOOLEAN==cell.getCellType()) { 
         builder.append(cell.getBooleanCellValue()+"  "); 
        } else if(HSSFCell.CELL_TYPE_BLANK==cell.getCellType()); 
        builder.append("BLANK  "); 
       } 
       if (isValidRow){ 
        System.out.println(builder.toString()); 

       } 
       builder.setLength(0); 
      } 

UPDATE 주처럼

**. 확인하려는 셀의 정확한 위치를 알고있는 경우

이와 같이 확인할 수도 있습니다.

HSSFCell cell = (HSSFCell) row.getCell(3); 
if ("04/24/2014".equals(cell.getStringCellValue())){ 
    Iterator cells = row.cellIterator(); 
       while(cells.hasNext()) { 
        HSSFCell cell = (HSSFCell) cells.next(); 

        //missing condition 

        if(HSSFCell.CELL_TYPE_STRING==cell.getCellType()) { 
         builder.append(cell.getStringCellValue()+"  "); 
        } else if (HSSFCell.CELL_TYPE_NUMERIC==cell.getCellType()) { 
         builder.append(cell.getNumericCellValue()+"  "+cell.getColumnIndex()); 
        } else if(HSSFCell.CELL_TYPE_BOOLEAN==cell.getCellType()) { 
         builder.append(cell.getBooleanCellValue()+"  "); 
        } else if(HSSFCell.CELL_TYPE_BLANK==cell.getCellType()); 
        builder.append("BLANK  "); 
       } 

} 
관련 문제