1. Обзор
Ячейка Microsoft Excel может иметь различные типы, такие как строковые, числовые, логические значения и формулы.
В этом кратком руководстве мы покажем, как читать значение ячейки в виде строки — независимо от типа ячейки — с помощью Apache POI.
2. Апач POI
Для начала нам сначала нужно добавить зависимость poi в файл нашего проекта pom.xml
:
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>5.2.0</version>
</dependency>
Apache POI использует интерфейс Workbook
для представления файла Excel. Он также использует интерфейсы Sheet
, Row
и Cell
для моделирования различных уровней элементов в файле Excel. На уровне ячейки
мы можем использовать его метод getCellType()
для получения типа ячейки . Apache POI поддерживает следующие типы ячеек:
- ПУСТОЙ
- логическое значение
- ОШИБКА
- ФОРМУЛА
- ЦИФРОВОЙ
- НИТЬ
Если мы хотим отобразить содержимое файла Excel на экране, мы хотели бы получить строковое представление ячейки вместо ее необработанного значения. Поэтому для ячеек, которые не имеют тип STRING, нам нужно преобразовать их данные в строковые значения .
3. Получить значение строки ячейки
Мы можем использовать DataFormatter
для получения строкового значения ячейки Excel. Он может получить форматированное строковое представление значения, хранящегося в ячейке. Например, если числовое значение ячейки равно 1,234, а правилом формата этой ячейки является два десятичных знака, мы получим строковое представление «1,23»:
Cell cell = // a numeric cell with value of 1.234 and format rule "0.00"
DataFormatter formatter = new DataFormatter();
String strValue = formatter.formatCellValue(cell);
assertEquals("1.23", strValue);
Таким образом, результатом DataFormatter.formatCellValue()
является отображаемая строка, точно такая же, как в Excel.
4. Получить строковое значение ячейки формулы
Если тип ячейки — FORMULA, предыдущий метод вернет исходную строку формулы вместо вычисленного значения формулы. Следовательно, чтобы получить строковое представление значения формулы, нам нужно использовать FormulaEvaluator
для оценки формулы :
Workbook workbook = // existing Workbook setup
FormulaEvaluator evaluator = workbook.getCreationHelper().createFormulaEvaluator();
Cell cell = // a formula cell with value of "SUM(1,2)"
DataFormatter formatter = new DataFormatter();
String strValue = formatter.formatCellValue(cell, evaluator);
assertEquals("3", strValue);
Этот метод является общим для всех типов клеток. Если тип ячейки — FORMULA, мы оценим его, используя данный FormulaEvaluator
. В противном случае мы вернем строковое представление без каких-либо вычислений.
5. Резюме
В этой быстрой статье мы показали, как получить строковое представление ячейки Excel независимо от ее типа. Как всегда, исходный код статьи доступен на GitHub .