Metadata-Version: 2.3
Name: tablichka
Version: 0.1.0
Summary: Convert HTML text and tables to XLSX with class-based styles.
Author: DurnevVS
Author-email: DurnevVS <lewberstklol@gmail.com>
Requires-Dist: beautifulsoup4>=4.15.0
Requires-Dist: openpyxl>=3.1.5
Requires-Python: >=3.14
Description-Content-Type: text/markdown

# Tablichka

Конвертер HTML в XLSX на BeautifulSoup и openpyxl. Нужен Python 3.14+.

BeautifulSoup читает HTML, `BlockExtractor` выделяет текст и таблицы в порядке
документа, `GridBuilder` рассчитывает координаты и объединения в `SheetModel`,
а `ExcelWriter` применяет стили и сохраняет файл.

Поддерживаются `h1`, `p`, таблицы с `th`/`td`, `rowspan` и `colspan`.
Размеры строк и столбцов подбираются приблизительно по тексту и шрифту.
CSS и JavaScript не обрабатываются.

## Запуск

Из корня проекта:

```bash
uv sync
uv run tablichka input.html report.xlsx
```

Также работает `uv run python -m tablichka input.html output.xlsx`.
Команда использует базовое оформление. Пример со стилями и границами:

```bash
uv run python examples/convert_report.py
```

## Использование как зависимости

В другом проекте добавь путь к этому репозиторию:

```bash
uv add /path/to/Tablichka
```

Без uv можно установить пакет через `pip install /path/to/Tablichka`.
После установки доступны импорт `tablichka` и одноимённая команда.

```python
from tablichka import Style, convert, convert_file
from openpyxl.styles import Border, Font, Side

line = Side(style="thin", color="808080")
styles = {
    "bordered": Style(border=Border(left=line, right=line, top=line, bottom=line)),
    "header": Style(font=Font(name="Arial", size=12, bold=True)),
}

html = '<table><tr><th class="bordered header">Товар</th></tr></table>'
model = convert(html, "report.xlsx", styles=styles)
# Для файла: convert_file("input.html", "report.xlsx", styles=styles)
```

Классы применяются слева направо. Поле `None` сохраняет прежний параметр;
заданный `Font`, `Border`, `PatternFill` или `Alignment` заменяет компонент целиком.
Без заданных стилей используется `DEFAULT_STYLE`. Значения остаются строками,
пока класс явно не задаст `content_type="number"` или `"date"`.
Стили задаются на самих текстовых блоках и ячейках, без наследования от обёрток.

## Сборка и проверка

```bash
uv build
uv run python -m unittest discover -s tests -v
```

В `dist/` появятся wheel и исходный архив. Wheel можно передать другому проекту:

```bash
pip install dist/tablichka-0.1.0-py3-none-any.whl
```
