2012-03-03 3 views
0

Я использую Apache poi api для java для записи в существующий лист в книге Excel. Моя проблема заключается в том, что на листе, который я пытаюсь изменить, если какая-либо ячейка в строке не является нулевой, то есть имеет какое-то значение в ней, тогда программа отлично работает и редактирует любую конкретную ячейку в этой строке. Например, если ячейка на моем листе (1,1) содержит значение, тогда у программы не будет проблем с редактированием других ячеек той же строки, например, (1,5) или (1,12) и т. Д. Но если вся моя строка пуста, то есть все ячейки содержат нуль, тогда код генерирует исключение nullpointer, которое я не могу понять, как удалить. Вот метод записи, который я использовал для моего проекта, чтобы написать конкретную ячейку в моем классе excel.Лист изменения уязвимости в excel с использованием apache poi api

public void write(int row, int column, String label) { 


    try { 
     InputStream inp = new FileInputStream(filePath); 
     Workbook wb = WorkbookFactory.create(inp); 
     Sheet sheet = wb.getSheetAt(0); 
     Row sheetRow = sheet.getRow(row); 
     Cell cell = sheetRow.getCell(column); 
     //String cellContents = cell.getStringCellValue(); 
     //  //Modify the cellContents here 
     //  // Write the output to a file 
     if (cell == null) { 
      cell = sheetRow.createCell(column); 
      cell.setCellType(Cell.CELL_TYPE_STRING); 
     } 
     cell.setCellType(Cell.CELL_TYPE_STRING); 
     cell.setCellValue(label); 
     FileOutputStream fileOut = new FileOutputStream(filePath); 
     wb.write(fileOut); 
     fileOut.close(); 
    } catch (IOException ex) { 
     Logger.getLogger(ExcelManipulator.class.getName()).log(Level.SEVERE, null, ex); 
    } catch (InvalidFormatException ex) { 
     Logger.getLogger(ExcelManipulator.class.getName()).log(Level.SEVERE, null, ex); 
    } 
} 

Исключение Java бросает на редактирование ячейки в нетронутом то есть нулевая строка:

Exception in thread "main" java.lang.NullPointerException 
at seleniumtest.ExcelManipulator.write(ExcelManipulator.java:76) 
at seleniumtest.SeleniumTest.main(SeleniumTest.java:28) 

Java Результат: 1

Может кто-нибудь помочь мне избавиться от этого, так что мой код также записывает ячейку, даже если вся строка равна нулю? Спасибо

ответ

3

Я точно не знаю, где находится NPE, но я уверен, что строка 76 ExcelManipulator.java - это строка: Cell cell = sheetRow.getCell(column);?

Как указано в API for Sheet, вы получаете нуль, если вы запрашиваете неопределенную строку - это случай, если вся строка пуста.

Таким образом, вы можете вставить if(sheetRow == null){sheetRow = sheet.createRow(row);} перед указанной линией, и все должно быть в порядке.

+0

О да, это решило проблему. Большое спасибо :) – pslayer89

+0

Thx. У меня такая же проблема. действительно удобный ответ. :-) – Juraj

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