Почему я написал семейство библиотек FastExcelPhp и кому она реально нужна
Если вы хоть раз генерировали Excel-файлы в PHP, вы почти наверняка использовали PhpSpreadsheet. И почти наверняка в какой-то момент столкнулись с одной из проблем:
- файл на 200–300 тысяч строк внезапно «съедает» гигабайт памяти
- генерация Excel падает в очереди
- скрипт стабильно утыкается в memory_limit
- время генерации отчёта измеряется минутами
- Docker-контейнер умирает без объяснений
В какой-то момент становится понятно: проблема не в коде отчёта. Проблема — в подходе.
PhpSpreadsheet — хороший инструмент, но не для всех задач
Сразу важное уточнение: PhpSpreadsheet — отличная библиотека, но у неё есть фундаментальное ограничение: она строит объектную модель книги целиком в памяти.
Упрощённо это выглядит так:
$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();
foreach ($rows as $row) {
$sheet->fromArray($row);
}
Каждая ячейка — объект, каждый стиль — объект, каждая строка — объект. Любая сущность — от шрифта до диаграммы, от формата ячейки до настроек страниц, — все это объекты.
При 10 000 строк это ещё терпимо. При 100 000 — уже не очень. При 500 000 — боль и мука. А при миллионе — гарантированный провал.
Ключевая мысль: Excel ≠ UI, Excel = формат
Но зачем держать в памяти всю Excel-книгу? Ведь XLSX — это ZIP с XML-файлами.
То есть:
- строки можно писать последовательно
- стили можно переиспользовать
- нет необходимости весь Excel-файл собирать в памяти.
Философия FastExcelPhp
FastExcel — это не «ещё одна обёртка над Excel». Это набор библиотек, построенных вокруг одной идеи: Писать и читать XLSX так, как он реально устроен.
Основные принципы:
- минимальное потребление памяти
- потоковая запись и чтение
- контроль над стилями и XML
- отсутствие лишних абстракций
- предсказуемость
Библиотеки FastExcelPhp не пытаются эмулировать Excel, они работают с форматом напрямую.
Что входит в семейство библиотек FastExcelPhp
FastExcelWriter
Для генерации XLSX-файлов:
- потоковая запись строк
- повторное использование стилей
- любые графики и диаграммы, поддерживаемые Excel
- формулы, условное форматирование, настройки печати
- запись десятков и сотен тысяч, и даже миллионов строк без переполнения памяти
https://github.com/aVadim483/fast-excel-writer
FastExcelReader
Для чтения Excel:
- потоковый парсинг
- без загрузки всего файла в память
- идеально для импорта больших файлов
https://github.com/aVadim483/fast-excel-reader
FastExcelTemplator
Когда Excel — это шаблон:
- плейсхолдеры
- циклы
- работа с готовым дизайном от аналитиков и бухгалтеров
https://github.com/aVadim483/fast-excel-templator
FastExcelLaravel
Интеграция с Laravel:
- контейнер
- фасады
- импорт и экспорт моделей и коллекций
- удобная конфигурация
https://github.com/aVadim483/fast-excel-laravel
Каждая библиотека решает один комплекс задач, но делает это максимально эффективно.
Для кого FastExcelPhp — маст-хев
Библиотеки FastExcelPhp особенно хорошо подходzт, если вы:
- делаете SaaS с экспортами
- генерируете отчёты по расписанию
- работаете с маркетплейсами
- импортируете большие Excel-файлы
- используете очереди
- ограничены по памяти (Docker, serverless, shared hosting)
Если же вам нужно «пару красивых табличек» — PhpSpreadsheet по-прежнему отличный выбор.