2015-09-30 2 views
-1

Я пишу код, который находит нужный столбец во входном листе и берет весь столбец и помещает его в другом порядке в лист вывода. В основном я хочу взять файл Excel и реорганизовать его в выходной файл. Путь, который я выбрал, - найти числовое значение столбца и использовать его для поиска ячеек в каждой строке. Я получаю сообщение об ошибке на линии rdrCell = inputSheet.getRow(placeRow+1).getCell(y); что-то не так с тем, как я пытаюсь получить значение ячейки?java.lang.NullPointerException error, using

for(Iterator<Cell> cit = idRow.cellIterator(); cit.hasNext();) 
      { 
       Cell cell = cit.next(); 
       cell.setCellType(Cell.CELL_TYPE_STRING); 
       String chr = "Chr"; 
       Row rdrRow = null; 
       Cell rdrCell = null; 
       if(chr.equals(cell.getStringCellValue())) 
       { 
        int y = cell.getColumnIndex(); 
        for(int placeRow = 0; placeRow<=rowCounter;placeRow++) 
        { 
         // error in line below 
         rdrCell = inputSheet.getRow(placeRow+1).getCell(y); 
         rdrCell.setCellType(Cell.CELL_TYPE_STRING); 
         String chrString = rdrCell.getStringCellValue(); 
         Cell chrCell = outputSheet.createRow(placeRow).createCell(0); 
         chrCell.setCellValue(chrString); 
        } 

       } 

ответ

2

Ваш цикл заходит слишком далеко.

for(int placeRow = 0; placeRow<=rowCounter;placeRow++) 

Изменение средней части и проверьте placeRow < rowCounter вместо <=

+0

После смены знака ниже его работы, так что спасибо! Однако, когда я пытаюсь скопировать и вставить тот же код для другого столбца, кажется, что он полностью удаляет первый столбец. Почему это? – UberKoolMan

1

Это происходит, когда ваш placeRow равно последний индекс (я имею в виду placeRow = rowCounter), так что вы пытаетесь получить placeRow + 1, но вы уже достигли предела строк и его не существует.

Я предлагаю вам удалить это + 1 и просто использовать:

rdrCell = inputSheet.getRow(placeRow).getCell(y);

Так что, если вы хотите, чтобы перейти первую строку (например, `s происходит), просто начните итератор с индексом 1, как : int placeRow = 1

+2

Почему я должен делать -1 каждый раз для проверки, могу ли я просто сравнить его с <вместо <=? Сложнее читать, делать больше вещей, менее эффективно. – WarrenFaith

+0

Действительно, я согласен с вами. Я снова прочитал, и я нашел настоящую проблему, и я редактировал свой ответ. Thnks –

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