Arhn - архитектура программирования

Проблема с изменением листа в Excel с помощью apache poi api

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

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

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


Ответы:


1

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

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

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

04.03.2012
  • Спасибо. У меня такая же проблема. действительно удобный ответ. :-) 10.07.2013
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..