Чтение чисел как строк из Excel в Java с POI
Пройдите тест, узнайте какой профессии подходите
Быстрый ответ
Если вам потребовалось получить числовые данные из ячеек Excel в виде строк в Java, то наилучшим решением будет использование класса DataFormatter
из библиотеки Apache POI. Рассмотрим следующий пример:
DataFormatter formatter = new DataFormatter();
Sheet sheet = workbook.getSheetAt(0);
for (Row row : sheet) {
for (Cell cell : row) {
System.out.println(formatter.formatCellValue(cell));
// Вы получаете значения ячеек, которые будут представлены точно так же, как в Excel
}
}
Этот код игнорирует числовой формат данных и выводит их в виде текста, при этом сохраняя исходное визуальное представление.
Преодоление ограничений .toString()
Для корректного различения значений, которые могут визуально совпадать, например, "2" и "2.0", применение метода .toString()
будет неэффективно. В то время как DataFormatter
поможет избежать подобной путаницы:
Cell cell = ... // В эту переменную помещается ваша ячейка
DataFormatter formatter = new DataFormatter();
String textValue = formatter.formatCellValue(cell);
// Таким образом, "2.0" будет отличаться от "2"
Такой подход позволяет сохранить специфику форматирования, что крайне важно для данных типа номеров счетов или идентификаторов.
Стратегия работы с формулами
Обработка формул Excel требует особого подхода. В этом случае следует использовать комбинирование классов FormulaEvaluator
и DataFormatter
:
Workbook workbook = ... // Загружаете ваш документ Excel
FormulaEvaluator evaluator = workbook.getCreationHelper().createFormulaEvaluator();
DataFormatter formatter = new DataFormatter();
for (Row row : workbook.getSheetAt(0)) {
for (Cell cell : row) {
if (cell.getCellType() == CellType.FORMULA) {
System.out.println(formatter.formatCellValue(cell, evaluator));
} else {
System.out.println(formatter.formatCellValue(cell));
}
}
}
При таком подходе формулы преобразуются в присущие им значения, а не в текст формулы.
Тип рабочей книги: выбираем правильный инструмент!
Важно выбрать соответствующую реализацию Workbook
: HSSF подойдет для файлов с расширением .xls, тогда как для .xlsx будет подходить XSSF. В соответствии с этим выбор FormulaEvaluator
также зависит от типа файла, будь то HSSFFormulaEvaluator
или XSSFFormulaEvaluator
.
При обработке больших файлов Excel лучшим выбором станет потоковая обработка с помощью SXSSFWorkbook
из библиотеки Apache POI.
Детальнее о NumberToTextConverter
Для сохранения точности числовых значений без их округления необходимо использовать NumberToTextConverter
от Apache POI:
double cellValue = ... // Число из ячейки
String preciseText = NumberToTextConverter.toText(cellValue);
// Так вы получите точное числовое значение в текстовом формате
Такой подход гарантирует максимально точное сохранение исходного числового значения.
Визуализация
Визуализируйте ячейки Excel как контейнеры, маркированные числами:
Ячейки Excel: [🔢1️⃣, 🔢2️⃣, 🔢3️⃣]
Вам нужно видеть их как текст, поэтому вы используете DataFormatter
:
DataFormatter formatter = new DataFormatter(); // 🛠️
cellValue = formatter.formatCellValue(cell); // 🪄📜
По итогу, числа представляются как текст:
Ячейки Excel: [🔠"1", 🔠"2", 🔠"3"]
// Все числа преобразованы в текст. Прощайте, числа!
DataFormatter
не заменяет содержимое ячеек, а изменяет способ их восприятия в Java.
Итерация по типам ячеек
Перед преобразованием важно определить тип ячейки с помощью getCellType()
:
Cell cell = ... // Экземпляр ячейки
switch (cell.getCellType()) {
case NUMERIC:
// Применяем DataFormatter или NumberToTextConverter
break;
case STRING:
// Просто берем текст из ячейки
break;
case FORMULA:
// Сначала оцениваем формулу
break;
// Не забывайте проверить и другие типы ячеек
}
Полезные материалы
- Подробное руководство по работе с файлами Excel в Java при помощи Apache POI: Чтение файлов Excel в Java через Apache POI | CalliCoder.
- Документация, описывающая специфику работы со форматами HSSF и XSSF: Руководство по HSSF и XSSF от Apache POI.
- Форум для обсуждения вопросов чтения и записи файлов в Excel: java – Чтение и запись файлов Excel – Stack Overflow.
- Официальный исходник библиотеки Apache POI на GitHub: GitHub – apache/poi: Mirror ПО Apache POI.
- API-документация по управлению форматированием ячеек: DataFormatter (API-документация POI).
- Руководство по управлению большими файлами Excel: SXSSFWorkbook (API-документация POI).