GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Sign in
  • ActionsCI/CD and automation
  • CodespacesCloud development environments
  • All Features
  • Documentation
  • Training
  • Certifications
  • Build with Copilot
  • Customize Copilot
  • Integrations
  • Trending repos
  • GitHub Sponsors
  • Developer articles
  • Enterprises

This view

  • Original page
  • New address

GeezerVison is showing github.com — GitHub - spacious-team/table-wrapper-api: Helps to declare tables from various file formats and provides unified API for search and access to row, column, and cell value.

BranchesTags
Open more actions menu

Latest commit

 

History

199 Commits
199 Commits

Folders and files

NameName
Last commit message
Last commit date
.github
.github
 
 
.idea
.idea
 
 
.mvn/wrapper
.mvn/wrapper
 
 
src
src
 
 
.gitignore
.gitignore
 
 
LICENSE
LICENSE
 
 
README.md
README.md
 
 
codecov.yml
codecov.yml
 
 
jitpack.yml
jitpack.yml
 
 
mvnw
mvnw
 
 
mvnw.cmd
mvnw.cmd
 
 
pom.xml
pom.xml
 
 

Repository files navigation

java-version jitpack-last-release Unit tests Coverage

Оглавление

  • Назначение
  • Пример использования
  • Зависимости

Назначение

Предоставляет единый удобный API для доступа к табличным данным из файлов в форматах excel, xml, csv и др.

Разберем доступ к данным на примере. Пусть на листе excel (xml или csv) имеется несколько таблиц.

  • Таблица с ценой товаров:

Таблица товаров

Товар Цена (опт), руб/кг Цена розничная, руб/кг
Яблоко 50 90.5
Груша 120 180.0
  • Таблица с заголовком из 2-х строк:

Таблица продаж

Покупатель Категория Объем,
Страна Компания покупателя кг
Россия "Шестерочка" опт 100000
Беларусь "Фруктелла" опт 50000
Итого 150000
  • Пусть также иногда встречается следующий вариант заголовка предыдущей таблицы (причем заранее не известно какой вариант встретится в файле):
Покупатель Категория Вес,
Страна Компания покупателя кг

Пример использования

Для представленного выше примера объявляются описания столбцов вне зависимости от формата файла (excel, xml, csv и др.):

enum ProductTableHeader implements TableHeaderColumn {
    PRODUCT(0),
    PRICE_TRADE("цена", "опт"),
    PRICE("цена", "розничная");

    private final TableColumn column;

    ProductTableHeader(int columnIndex) {
        this.column = ConstantPositionTableColumn.of(columnIndex);
    }

    ProductTableHeader(String... words) {
        this.column = PatternTableColumn.of(words);
    }

    public TableColumn getColumn() {
        return column;
    }   
}

enum SalesTableHeader implements TableHeaderColumn {
    BUYER_COUNTRY(MultiLineTableColumn.of("покупатель", "страна")),
    BUYER_COMPANY(MultiLineTableColumn.of("покупатель", "компания")),
    TYPE(MultiLineTableColumn.of("категория", "покупателя")),
    VOLUME(AnyOfTableColumn.of(
                           MultiLineTableColumn.of("объем", "кг"),
                           MultiLineTableColumn.of("вес", "кг")));

    private final TableColumn column;

    CellTableHeader(TableColumn column) {
        this.column = column;
    }

    public TableColumn getColumn() {
        return column;
    }  
}

В зависимости от формата исходных данных подготавливаются объекты ReportPage. Например, для excel файла потребуются зависимость table-wrapper-excel-impl или Spring Boot Starter и код:

TableFactoryRegistry.add(new ExcelTableFactory());             // регистрируем фабрику
Workbook book = new XSSFWorkbook(xlsFileinputStream);          // открываем Excel файл
ReportPage reportPage = new ExcelSheet(book.getSheetAt(0));    // используем 1-ый лист Excel файла для поиска таблиц

Используем API для доступа к данным таблиц

// Регистронезависимо найдет ячейку с текстом "Таблица товаров" - это имя таблицы.
// Имя таблицы описано в единственной строке (2ой аргумент).
// Парсит следующую 1 строку (5ый аргумент) как заголовок таблицы (заголовок описан с помощью enum ProductTableHeader).
// Последующие строки парсятся как данные до пустой строки или конца файла (3ий аргумент 'null')
Table productTable = reportPage.createTable("таблица товаров", 1, null, ProductTableHeader.class, 1);

// Регистронезависимо найдет ячейку с текстом "Таблица продаж" - это имя таблицы.
// Имя таблицы описано в единственной строке (2ой аргумент).
// Парсит следующие 2 строки (5ый аргумент) как заголовок таблицы (заголовок описан с помощью enum SalesTableHeader).
// Последующие строки парсятся как данные таблицы до строки, содержащей ячейку с текстом "Итого" (3ий аргумент)
Table salesTable = reportPage.createTable("таблица продаж", 1, "итого",  SalesTableHeader.class, 2);

for (TableRow row : productTable) {
    // Извлечет наименования товаров "Яблоко", "Груша" из "Таблицы товаров"
    String product = row.getStringCellValueOrDefault(PRODUCT, "Неизвестный товар");
    // Извлечет оптовые цены 50 и 120 из "Таблицы товаров"
    BigDecimal price = row.getBigDecimalCellValue(PRICE_TRADE);
}

// Список будет содержать ["Россия", "Беларусь"] из "Таблицы продаж"
Set<String> countries = salesTable.stream()
    .map(row -> row.getStringCellValue(BUYER_COUNTRY))
    .collect(toSet())

API предоставляет и другие удобные интерфейсы для работы с таблицами.

Зависимости

Необходимо подключить репозиторий 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>

Далее следует добавить зависимость table-wrapper-api

<dependency>
    <groupId>com.github.spacious-team</groupId>
    <artifactId>table-wrapper-api</artifactId>
    <version>master-SNAPSHOT</version>
</dependency>

В качестве версии можно использовать:

  • версию релиза на github;
  • паттерн <branch>-SNAPSHOT для сборки зависимости с последнего коммита выбранной ветки;
  • короткий десяти значный номер коммита для сборки зависимости с указанного коммита.

Для извлечения данных Вам также потребуется одна или несколько реализаций:

  1. table-wrapper-excel-impl для работы с excel файлами
<dependency>
    <groupId>com.github.spacious-team</groupId>
    <artifactId>table-wrapper-excel-impl</artifactId>
    <version>master-SNAPSHOT</version>
</dependency>
  1. table-wrapper-xml-impl для работы с xml файлами
<dependency>
    <groupId>com.github.spacious-team</groupId>
    <artifactId>table-wrapper-xml-impl</artifactId>
    <version>master-SNAPSHOT</version>
</dependency>
  1. table-wrapper-csv-impl для работы с csv (tsv) файлами
<dependency>
    <groupId>com.github.spacious-team</groupId>
    <artifactId>table-wrapper-csv-impl</artifactId>
    <version>master-SNAPSHOT</version>
</dependency>

Или напишите реализацию для своего формата представления таблицы по аналогии с существующими.

Существует также Spring Boot Starter для работы со Spring Boot проектами, который поставляет нужные зависимости и создает бины фабрик ExcelTableFactory, XmlTableFactory, CsvTableFactory.

About

Helps to declare tables from various file formats and provides unified API for search and access to row, column, and cell value.

Topics

apicsv-parserexcel-parserparserparser-apitablexml-parser

Resources

Readme
AGPL-3.0 license
Activity
Custom properties

Stars

1 star

Watchers

1 watching

Forks

3 forks
Report repository

Releases

Packages

Contributors

Languages

You are visitor 01402503 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.