Позволяет работать с табличным представлением данных в форматах 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" - это имя таблицы.
// Имя таблицы описано в единственной строке (2ой аргумент).
// Парсит следующую 1 строку (5ый аргумент) как заголовок таблицы (заголовок описан с помощью enum TableHeader).
// Последующие строки парсятся как данные до пустой строки или конца файла (3ий аргумент 'null')
// (метод использует бин ExcelTableFactory для создания таблицы Table на основе ReportPage).
Table table = reportPage.createTable("Таблица 1", 1, null, TableHeader.class, 1);
// Итерируемся по строкам таблицы и извлекаем ячейки из строк по заголовку таблицы
table.stream()
.forEach(row -> {
String product = row.getStringCellValue(TableHeader.PRODUCT);
BigDecimal price = getBigDecimalCellValue(TableHeader.PRICE);
});
}Автоконфигурация поставляет зависимости для чтения таблиц из excel, xml и csv файлов. Если у вас есть собственная реализация формата Table Wrapper API, прочтите таблицу следующим образом:
// 1. Выполните регистрацию фабрики вашего формата данных
CustomTableFactory factory = new CustomTableFactory(); // CustomTableFactory implements TableFactory
TableFactoryRegistry.add(factory);
// 2. Создайте объект вашего класса доступа к данным, например из файла (может быть любой источник, кроме файла)
CustomReportPage reportPage = new CustomReportPage("My file.txt"); // CustomReportPage implements ReportPage
// 3. Прочитайте таблицу из вашего файла тем же API, что и для excel, xml, csv файла
Table table = reportPage.createTable("Таблица 1", 1, null, TableHeader.class, 1);
table.stream()
.forEach(row -> {
String product = row.getStringCellValue(TableHeader.PRODUCT);
BigDecimal price = getBigDecimalCellValue(TableHeader.PRICE);
});