Это решило проблему, спасибо, я бы никогда не понял это сам.

я есть файл xlsx, который я читаю с помощью apache poi 3.17 в java 6. В одном случае у меня есть ячейка со значением 123456789011. Это считывается в java как NUMERIC CellTypeEnum Cell. Когда я использую DataFormatter, чтобы получить значение ячейки, как это:

DataFormatter formatter = new DataFormatter(Locale.US); String strVal = formatter.formatCellValue(cell);

Строковое значение получается как «1.234567 + 11». Мне нужно реальное значение в ячейке "123456789011". Как я могу получить это?

Я уже пытался использовать BigDecimal в Java для преобразования String, но это возвращает «123456700000», потому что это лучшее, что он может сделать с данной информацией; Это означает, что мне нужно получить правильное значение из фактического объекта ячейки. Я также попытался использовать cell.getNumericCellValue (), но он возвращает double, который имеет слишком малый предел для обработки исходного значения, поэтому он получается как «1.234567E11», что имеет ту же проблему, что и другой метод поиска.

Есть ли способ получить значение в виде строки из исходной ячейки, когда оно введено в xlsx? У меня нет власти над оригинальным xlsx.

Спасибо.

 user381394226 сент. 2017 г., 18:43
Это кроется в вопросе Centic
 centic27 сент. 2017 г., 08:31
Матрица пытается сказать вам, что double из getNumericCellValue () действительно содержит полное значение, а научная запись - это только то, что вы получаете, когда делаете печать через System.out.println или тому подобное.
 centic26 сент. 2017 г., 18:37
Почему вы не используете Cell.getNumericCellValue ()? Он должен возвращать фактическое значение как double без какого-либо форматирования.
 matrix26 сент. 2017 г., 19:00
Попробуй посмотреть здесьstackoverflow.com/questions/16098046/...
 user381394226 сент. 2017 г., 21:50
Я видел эту более раннюю матрицу, все еще отличную фундаментальную проблему от того, что я говорю

Ответы на вопрос(1)

Решение Вопроса

ю запись и преобразует ее в соответствующее числовое значение String.

Я попытался сделать это: (у меня есть номер 123456789011 в ячейке A1 на моем листе, с типом ячейки как NUMERIC)

Row row = sheet.getRow(0);
Object o = getCellValue(row.getCell(0));
System.out.println(new BigDecimal(o.toString()).toPlainString());

Метод getCellValue - это мой общий метод, который читает ячейку:

public Object getCellValue(Cell cell) {
        if (cell != null) {
            switch (cell.getCellType()) {
            case Cell.CELL_TYPE_STRING:
                return cell.getStringCellValue();

            case Cell.CELL_TYPE_BOOLEAN:
                return cell.getBooleanCellValue();

            case Cell.CELL_TYPE_NUMERIC:
                return cell.getNumericCellValue();
            }
        }
        return null;
    }

Надеюсь это поможет!

 user381394226 сент. 2017 г., 21:49
Это решило проблему, спасибо, я бы никогда не понял это сам.

Ваш ответ на вопрос