Возвращаемое значение jOpenDocument Sheet.getValueAt(int, int) является как строкой, так и BigDecimal?

Я обрабатываю электронную таблицу .ods с помощью библиотеки jOpenDocument. Поскольку я обрабатывал строки, все было в порядке, но когда дело доходит до обработки чисел, это боль.

В моем коде я повторяю электронную таблицу и делаю некоторые вычисления на основе значения, принятого ячейкой с индексом x, y. Удивительно, но я не могу получить класс значений, которые я получаю:

BigDecimal ferialestringa;
     while (true) {
                        boolean duplicate = false;
                        value = (String) sheet.getValueAt(0, count);
                        System.out.println(sheet.getValueAt(5, count).getClass());
                        ferialestringa = (BigDecimal) sheet.getValueAt(5, count);

Этот фрагмент распечатывает:

class java.math.BigDecimal
class java.lang.String
Exception in thread "main" java.lang.ClassCastException: java.lang.String cannot be cast to java.math.BigDecimal
    at InspectTwitter.main(InspectTwitter.java:78)

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

Если я попытаюсь разобрать возвращенный объект в строку, я также получу другое исключение ClassCastException:

class java.math.BigDecimal
Exception in thread "main" java.lang.ClassCastException: java.math.BigDecimal cannot be cast to java.lang.String
    at InspectTwitter.main(InspectTwitter.java:78)

Обратите внимание, что на этот раз класс кажется просто BigDecimal.

Я пытался найти документацию, но в этом javadoc доступен только Sheet.getValueAt(String). (Однако я нашел этот метод в учебниках, и, похоже, он очень хорошо работает со строками). Что я должен делать?


person Dev-otchka    schedule 18.10.2013    source источник


Ответы (1)


Как создается исходная таблица? Вы читаете это из файла?

Обходной путь может быть:

ferialestringa = new BigDecimal(sheet.getCellAt(5, count).getTextValue());

Таким образом, вы читаете строковое значение ячейки, а затем анализируете его в BigDecimal.

person Victor P.    schedule 08.11.2013