2013-08-12 6 views
2

저는 아파치 poi를 사용하여 엑셀 파일을 읽었습니다. 그러나 빈 셀에 관해서는 셀을 건너 뜁니다. 왜 그래야만하지? 나는 그것을 잡기 위해 if else 조건을 두었습니다. 내 코드는 다음과 같습니다.코드가 빈 필드를 건너 뛰는 이유는 무엇입니까?

while (cellIterator.hasNext()) { 

    cell = (XSSFCell) cellIterator.next(); 
     if(cell.getCellType() == Cell.CELL_TYPE_NUMERIC) 
     { 
      if(DateUtil.isCellDateFormatted(cell)) 
      { 
+0

출력은 어떻게됩니까? –

+0

내가 받고있어 : 5.0 | [email protected]|plplplpplplp|Fri Nov 11 00:00:00 IST 1988 | M|[email protected] | sdfsadfasdfasdfasdfasdf|asdfasdf|3.4253242E7 | 234234.0 | true | true | insted of : 5.0 | [email protected]|plplplp||plplp|Fri Nov 11 00:00:00 IST 1988 | M|[email protected] |sdfsadfasdfasdfasdfasdf|asdfasdf|3.4253242E7 | 234234.0 | true | true | 가운데 이름이 공백이므로 중간에 아무 것도없이 두 개의 파이프가 있어야합니다. – v0ld3m0rt

답변

2

나는 그 문제에 대한 좋은 해결책을 발견했다. 만약 당신이 모든 세포를 얻고 싶다면, 그것이 존재하든 그렇지 않든 상관없이, 반복자는 당신을위한 것이 아니다. 대신 셀 정책이 누락 된 상태에서 적절한 셀을 수동으로 가져와야합니다.

for(Row row : sheet) { 
    for(int cn=0; cn<row.getLastCellNum(); cn++) { 
     // If the cell is missing from the file, generate a blank one 
     // (Works by specifying a MissingCellPolicy) 
     Cell cell = row.getCell(cn, Row.CREATE_NULL_AS_BLANK); 
     // Print the cell for debugging`enter code here` 
     System.out.println("CELL: " + cn + " --> " + cell.toString()); 
    } 
} 

작동합니다. 이것은 모든 누락 된 행을 공백으로 변환하고 CELL_TYPE_BLANK가 그것을 잡을 것입니다.

4

CellIterator는 null 셀에 대한 반복을 지원하지 않습니다. 이러한 셀은 자동으로 건너 뜁니다. 이 동작을 변경하려면 특정 행의 셀 (0부터 시작하는 인덱스 사용)을 수동으로 반복해야합니다.

동일한 예가 here으로 기재되어있다.

관련 문제