Apache POI надежный способ определения последней строки - PullRequest
0 голосов
/ 31 марта 2020

Я использую Apache POI для чтения данных из электронной таблицы Excel и отправки POST в удаленную службу.

Во время тестирования моей реализации я обнаружил, что она взорвалась с исключением, когда мой метод попытался проанализировать пустую строку в BigDecimal. Я обнаружил, что это связано с тем, что, согласно документации Apache POI, getLastRowNum () может

строк, которые ранее содержали содержимое и были установлены пустыми, могут все еще считаться как строки Excel и Apache POI, поэтому результат этого метода будет включать такие строки, и поэтому возвращаемое значение может оказаться выше ожидаемого!

И вот, оно вернуло большее число, чем я изначально ожидал, заставив меня использовать значение в первой ячейке строки в качестве условия выхода для моего l oop, что-то вроде следующего:

String productCode= excelMapper.getValueFromRow(r, "product_code");

while (productCode!= null && !productCode.isEmpty()) {
    MyBeanClass bean = new MyBeanClass ();
    r = sheet.getRow(i);

    productCode = excelMapper.getValueFromRow(r, "cod_prodotto");
    yada yada....
}

Это работает для моих целей, но я было интересно, если есть лучший способ.

1 Ответ

0 голосов
/ 04 апреля 2020

Повышение комментария к ответу ...

Файлы Excel, как правило, хранятся "разреженно", поэтому с пробелами для строк без данных. Таким образом, любая строка в файле Excel, которую вы читаете обратно с Apache POI может быть нулевым. Точно так же строка может быть стилизована, но в ней нет данных, что означает, что вы получите ее обратно, если попросите ее, но без значений, как вы ожидаете.

Итак, для вашего случая вы, вероятно, захотите чтобы начать в последнем ряду, и работать в обратном направлении. Для каждой строки проверьте, является ли она нулевой. Если это не ноль, возьмите несколько ячеек, зная, что они тоже могут быть нулевыми! Проверьте их и, если достаточно, присутствует / действителен, считайте, что «последняя действительная строка». Если нет, то go на один ряд выше. Повторяйте, пока не найдете то, что считаете правильным!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...