2013-08-12 3 views
2

Я использую apache poi для чтения из файлов excel, но когда дело доходит до пустых ячеек, он пропускает ячейку. Почему это так? Я поместил условие 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]|plplplp|plplp|Fri 11 ноября 00:00:00 IST 1988|M|[email protected]|sdfsadfasdfasdfasdfasdf|asdfasdf|3.4253242E7 | 234234,0 | верно | верно | insted of: 5,0 | [email protected]|plplplp||plplp|Fri 11 ноября 00:00:00 IST 1988|M|[email protected]|sdfsadfasdfasdfasdfasdf|asdfasdf|3.4253242E7 | 234234,0 | верно | верно | второе имя пустое, поэтому я должен получать две трубы без чего-либо между ними – 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 не поддерживает итерацию по нулевым ячейкам. Он автоматически пропустит такие ячейки. Чтобы изменить это поведение, вам необходимо вручную перебрать ячейки (с использованием индекса на основе 0) строки-участника.

Пример такого же описания here.

Смежные вопросы