Excel в PHP: читать, писать или заполнять шаблоны — как выбрать инструмент

aVadim 03.08.2026 00:00

Вы завели тикет «сделать выгрузку в Excel» (или «принять Excel от пользователя»), пошли в поиск — и первым же ответом получили PhpSpreadsheet. Он умеет всё сразу, и поэтому кажется очевидным выбором. Проблема в том, что «умеет всё» здесь означает «загружает весь файл в объектную модель в памяти» — и на реальных объёмах или в цикле это быстро превращается в Allowed memory size exhausted.

Прежде чем выбирать библиотеку, полезно понять: «работа с Excel» — это не одна задача, а три разные. И под каждую нужен свой инструмент.

Три разные задачи, которые все называют «Excel в PHP»

1. Прочитать чужой файл

Пользователь загрузил прайс, выгрузку из 1С или отчёт — вам нужно достать из него данные: пройтись по строкам, сложить в базу, провалидировать. Здесь важны скорость и память: файл может быть на сотни тысяч строк, а вам нужны только значения.

Вам не нужна вся книга в памяти — нужен потоковый разбор строка за строкой.

2. Создать файл с нуля

У вас есть массив данных из базы, и нужно сложить его в таблицу: заголовки, строки, немного стилей, автоширина, может быть, формулы и диаграмма. Структуру вы задаёте сами из кода — «пишем сверху вниз».

Здесь тоже критична потоковость: отчёт на миллион строк не должен ронять процесс по памяти.

3. Заполнить готовый бланк

А вот это — отдельный случай, который часто пытаются решить не тем инструментом. У вас есть готовый XLSX-бланк (счёт, акт, договор, справка), который нарисовал бухгалтер или дизайнер: с логотипом, рамками, объединёнными ячейками, форматами и формулами. Вам не надо строить документ — надо подставить в него данные, ничего не сломав в оформлении.

Если пытаться решать это через «создать файл с нуля», вы будете вручную переписывать кодом всё оформление, которое уже нарисовано в файле. Это долго, хрупко и бессмысленно.

Семейство FastExcelPhp: по инструменту на задачу

Вместо одного комбайна здесь три лёгкие библиотеки, каждая заточена под свою задачу и построена вокруг потоковой обработки (не держит весь лист в памяти):

  • FastExcelReader — задача №1, читать. Потоковый разбор XLSX (а в свежих версиях — и старого .xls, и CSV).
  • FastExcelWriter — задача №2, писать с нуля. Стили, формулы, диаграммы, автофильтры — всё из кода.
  • FastExcelTemplator — задача №3, заполнять шаблоны. Наш герой в этой статье.

(Есть ещё FastExcelLaravel — обёртка над семейством для Laravel: фасады, импорт-экспорт моделей и коллекций.)

Когда ваша задача — шаблон

Признаки того, что вам нужен именно Templator, а не Writer:

  • документ имеет фиксированный фирменный вид, и этот вид проще нарисовать в Excel, чем описать кодом;
  • оформлением владеет не программист — бухгалтер, аналитик, — и он должен править бланк сам, без релиза;
  • в документе есть логотип, примечания, хитрые рамки, объединения — то, что муторно воспроизводить в коде;
  • нужно много одинаковых документов из одного бланка (счета, справки, договоры).

Идея простая: бланк — это обычный XLSX, который вы рисуете руками и размечаете плейсхолдерами. Код только подставляет значения:

php
use avadim\FastExcelTemplator\Excel;

// Открываем шаблон и указываем, куда писать результат
$excel = Excel::template('invoice-tpl.xlsx', 'invoice-out.xlsx');
$sheet = $excel->sheet();

// Подставляем данные вместо плейсхолдеров в шапке
$sheet->fill([
    '{{COMPANY}}' => 'ООО «Ромашка»',
    '{{NUMBER}}'  => 128,
]);

// Переносим строки шаблона в вывод и сохраняем
$sheet->transferRows();
$excel->save();

Всё оформление — шрифты, рамки, логотип, формат чисел — библиотека переносит из шаблона сама, потому что она сохраняет исходный файл и лишь заменяет в нём значения.

Честная развилка: что взять

Чтобы не ошибиться с выбором, держите короткий чек-лист:

  • Надо прочитать данные из чужого файлаfast-excel-reader. Templator этого не делает.
  • Надо построить таблицу целиком из кода, готового бланка нет → fast-excel-writer. Это его работа, а не Templator.
  • Есть готовый XLSX-бланк, надо подставить в него данныеfast-excel-templator.
  • Нужен старый .xls как шаблон → так нельзя: Templator работает только с XLSX (Office 2007+). Пересохраните исходник в .xlsx.
  • Проект на Laravel и хочется импорт-экспорт моделей → посмотрите fast-excel-laravel поверх нужной библиотеки.

Ключевая мысль: не тащите комбайн туда, где хватит отвёртки. Если вы поймали себя на том, что кодом воспроизводите оформление уже существующего файла, — вам нужен шаблонный подход, и дальше стоит смотреть в сторону FastExcelTemplator. Как он заполняет бланк по шагам — тема отдельного разбора.

Комментарии (0)