Apache POI извлекает значение, как оно выглядит в Excel

У меня есть файл Excel и некоторое содержимое из внешнего источника (база данных, файл и т. Д.). Я столкнулся с проблемами с числовыми ячейками в Excel -getNumericValue возвращает двойное значение для любой ячейки, независимо от того, как значение в ней отформатировано. Внешний источник возвращает строковое представление чисел, т.е. он может возвращать «301» и «301.0», и это разные значения, и я не знаю, какой тип может быть в каком случае. Но если у меня есть «301» в файле Excel, метод getNumericValue всегда будет возвращать «301.0», поэтому, если мне нужно сравнить значения из внешнего источника и из Excel, «301» в Excel будет отличаться от «301» из внешнего источника, поскольку они будут иметь разные строковые представления.

Короче говоря, не могли бы вы показать мне рабочий способ получить строковое представление значения ячейки, как оно выглядит в Excel? У меня доступны только классы HSSF *.


person Anton    schedule 29.09.2011    source источник


Ответы (3)


Вам нужен класс DataFormatter. Обрабатывает форматирование содержимого ячейки на основе примененных к ней правил форматирования. Он должен дать вам в основном то, что отображает Excel

person Gagravarr    schedule 29.09.2011

на основе другой поток, вы, вероятно, можете сначала установить тип ячейки как строку, прежде чем получать ее значения

cell.setCellType(Cell.CELL_TYPE_STRING);

Я пробовал этот подход при получении числа с более чем 15 десятичными знаками, и он отлично работает.

person spicefoo    schedule 28.03.2012

Не сравнивайте String, вместо этого сравните double:

String excelDouble=301.0;
String external="301";
Double externalDouble=Double.parseDouble(external);
externalDouble.equals(excelDouble); //return true
person Balconsky    schedule 29.09.2011
comment
Я написал, что не знаю, к какому типу может относиться значение, поэтому преобразование его в double - не лучший подход. я искал более гибкое решение - person Anton; 29.09.2011