Позволяет работать с табличным представлением данных в форматах Excel, Xml и Csv через единый интерфейс Table Wrapper API.
Совместим с проектами Spring Boot 2.7 и выше.
Spring Boot Starter настраивает реализации фабрик ExcelTableFactory
, XmlTableFactory
, CsvTableFactory
и подключает необходимые зависимости
- table-wrapper-excel-impl для работы с excel файлами
<dependency>
<groupId>com.github.spacious-team</groupId>
<artifactId>table-wrapper-excel-impl</artifactId>
</dependency>
- table-wrapper-xml-impl для работы с xml файлами
<dependency>
<groupId>com.github.spacious-team</groupId>
<artifactId>table-wrapper-xml-impl</artifactId>
</dependency>
- table-wrapper-csv-impl для работы с csv (tsv) файлами
<dependency>
<groupId>com.github.spacious-team</groupId>
<artifactId>table-wrapper-csv-impl</artifactId>
</dependency>
Необходимо подключить репозиторий open source библиотек github jitpack, например для Apache Maven проекта
<repositories>
<repository>
<id>central</id>
<name>Central Repository</name>
<url>https://repo.maven.apache.org/maven2</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
<repository>
<id>jitpack.io</id>
<url>https://jitpack.io</url>
</repository>
</repositories>
Далее добавить зависимость
<dependency>
<groupId>com.github.spacious-team</groupId>
<artifactId>table-wrapper-spring-boot-starter</artifactId>
<version>master-SNAPSHOT</version>
</dependency>
В качестве версии можно использовать:
- версию релиза на github;
- паттерн
<branch>-SNAPSHOT
для сборки зависимости с последнего коммита выбранной ветки; - короткий десяти значный номер коммита для сборки зависимости с указанного коммита.
Определяются колонки таблицы:
@lombok.Getter
@lombok.RequiredArgsConstructor
enum TableHeader implements TableHeaderColumn {
PRODUCT(PatternTableColumn.of("Товар")),
PRICE(PatternTableColumn.of("Цена"));
private final TableColumn column;
}
Извлекаем данные из таблицы с указанными колонками вне зависимости от формата файла (excel, xml, csv и др.):
@org.springframework.beans.factory.annotation.Autowired
ReportPageFactory reportPageFactory;
void parse() {
// Получаем страницу с данными. Используем бин ReportPageFactory для построения абстракции
ReportPage reportPage = reportPageFactory.create("1.xlsx");
// ... или reportPageFactory.create("1.xml");
// ... или reportPageFactory.create("1.csv");
// Метод найдет ячейку с текстом "Таблица 1",
// воспринимает следующую за ней строку как заголовок таблицы (который описан через enum TableHeader).
// Из последующих строк (до пустой строки или конца файла) извлекаются данные
// (метод использует бин ExcelTableFactory для создания таблицы Table на основе ReportPage)
Table table = reportPage.create("Таблица 1", TableHeader.class);
// Итерируемся по строкам таблицы и извлекаем ячейки из строк по заголовку таблицы
table.stream()
.forEach(row -> {
String product = row.getStringCellValue(TableHeader.PRODUCT);
BigDecimal price = getBigDecimalCellValue(TableHeader.PRICE);
});
}