Skip to content

spacious-team/table-wrapper-spring-boot-starter

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

24 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

java-version spring-boot-version jitpack-last-release Unit tests Coverage

Назначение

Позволяет работать с табличным представлением данных в форматах Excel, Xml и Csv через единый интерфейс Table Wrapper API.

Совместим с проектами Spring Boot 2.7 и выше.

Spring Boot Starter настраивает реализации фабрик ExcelTableFactory, XmlTableFactory, CsvTableFactory и подключает необходимые зависимости

  1. table-wrapper-excel-impl для работы с excel файлами
<dependency>
    <groupId>com.github.spacious-team</groupId>
    <artifactId>table-wrapper-excel-impl</artifactId>
</dependency>
  1. table-wrapper-xml-impl для работы с xml файлами
<dependency>
    <groupId>com.github.spacious-team</groupId>
    <artifactId>table-wrapper-xml-impl</artifactId>
</dependency>
  1. 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);
            });
}