2014-02-20 7 views

답변

3

분명 솔루션은 suggested by user2310289이지만 iterators skip over blank rows and cells으로는 작동하지 않습니다. 당신이 원하는 경우,

// Decide which rows to process 
int rowStart = Math.min(15, sheet.getFirstRowNum()); 
int rowEnd = Math.max(1400, sheet.getLastRowNum()); 

for (int rowNum = rowStart; rowNum < rowEnd; rowNum++) { 
    Row r = sheet.getRow(rowNum); 

    int lastColumn = Math.max(r.getLastCellNum(), MY_MINIMUM_COLUMN_COUNT); 

    for (int cn = 0; cn < lastColumn; cn++) { 
     Cell c = r.getCell(cn, Row.RETURN_BLANK_AS_NULL); 
     if (c == null) { 
     // The spreadsheet is empty in this cell 
     } else { 
     // Do something useful with the cell's contents 
     CellReference cr = new CellReference(c); 
     System.out.println("Cell at " + rowNum + "," + cn + " found, that's " + cr.formatAsString()); 
     } 
    } 
} 

또는 :

그래서, 하나의 옵션은 빈 셀을 돌보는 수동으로 반복하는 것입니다, 그리고 세포가 어디 있는지 당신은 항상 알 같은 코드 뭔가 당신이 셀에서 행과 셀 인덱스를 볼 필요가, 내가 엑셀 ​​셀의 좌표를 얻기 위해 다음 코드를 수행 한 예

for (Row r : sheet) { 
    for (Cell c : r) { 
     int columnNumber = c.getColumnIndex(); 
     int rowNumber = c.getRow().getRowNum(); 
     CellReference cr = new CellReference(c); 
     System.out.println("Cell at " + rowNum + "," + columnNumber + " found, that's " + cr.formatAsString()); 
    } 
} 
+0

더 좋은 방법이있을 것이라고 생각했습니다. 그러나 OP는 다른 질문에 따라 다른 것을 원한다. 나는 내 대답을 지울 것이다. –

+0

왜 최대 행을 맺고 있습니까? 즉 1400입니까? 어떤 이유로 필요합니까? 1400 개가 넘는 행이 있으면 전체 파일이 처리되지 않습니다. – RTF

+0

유스 케이스에 필요한대로 설정하거나 완전히 제거하십시오! 그냥 줄을 어떻게 제한하는지 예제를 제공합니다. – Gagravarr

1

을 쉽게 반복자를 사용합니다. 희망이 당신을 도울 것입니다.

public static void searchSheet(String searchText, XSSFSheet sheet) 
{ 

    int flag=0; 
    for (int i = sheet.getFirstRowNum(); i <= sheet.getLastRowNum(); i++) 
    { 
     XSSFRow row = sheet.getRow(i); 
     for (int j = row.getFirstCellNum(); j < row.getLastCellNum(); j++) 
     { 
      XSSFCell cell = row.getCell(j); 
      String CellData=cell.toString(); 
      if(searchText.equals(CellData)) 
      { 
       flag=1; 
       CellData=row.getCell(j+1).toString(); 
       System.out.println(CellData); 
       System.out.println("String Found At Row="+ i +" and At Column="+j); 


      } 

     } 
     break; 
    } 

    if(flag==0) 
    { 
     System.out.println("String Not Found"); 
    } 

} 
+0

왜이 줄을 추가했는지 이해할 수 없습니다. CellData = row.getCell (j + 1) .toString(); 이것을 가지고있는 동안 String CellData = cell.toString(); 어쨌든, 검색 솔루션의 종류에 대한 답장을 보내 주시면 감사하겠습니다. 나에게 도움이되었다. –

1

셀 주소를 얻을 수있는 가장 짧은 방법은 다음과 같습니다.

cell.getAddress() formatAsString()

다음

cell.getSheet을() 시트 이름을 얻을 수 있습니다. getSheetName()