Как PHP научился укрощать Excel-таблицы обзор PhpSpreadsheet
Знакомая ситуация: заказчик просит сделать выгрузку данных в "красивенький Excel-отчет", с формулами, графиками и шапкой фирменного цвета. Или, наоборот, нужно загрузить на сайт прайс-лист от поставщика — кривоватый XLSX-файл на 10 000 строк с кучей скрытых столбцов. Рутинная, казалось бы, задача, но сколько нервов она может потрепать, если под рукой нет правильного инструмента.
Сегодня мы поговорим как раз о таком инструменте — библиотеке, которая стала де-факто стандартом для работы с электронными таблицами в мире PHP. Встречайте, PHPOffice/PhpSpreadsheet.
Что это такое и почему не PHPExcel?
Многие PHP-разработчики со стажем наверняка помнят легендарную библиотеку PHPExcel. Долгие годы она была единственным адекватным решением для работы с Excel-файлами. Но время идет, стандарты PHP меняются, и PHPExcel, к сожалению, остался в прошлом — без поддержки неймспейсов, PSR-стандартов и современных версий PHP.
Именно здесь на сцену выходит PhpSpreadsheet. Это не просто обновление, а полная переработка и идейный наследник PHPExcel от тех же авторов. Если PHPExcel — это заслуженный ветеран, то PhpSpreadsheet — это его молодой, но уже закаленный в боях преемник, построенный на современных рельсах. Он использует неймспейсы, соответствует стандартам PSR, активно поддерживается и требует для работы актуальные версии PHP (на момент написания статьи — 8.1+).
Проще говоря, PhpSpreadsheet — это швейцарский нож для PHP-разработчика, которому нужно читать, создавать или модифицировать файлы электронных таблиц. И делает он это блестяще.
За что мы его любим? Ключевые возможности
Давайте разберемся, что же конкретно умеет эта библиотека и почему она так популярна (более 13 тысяч звезд на GitHub — это серьезная заявка).
1. Всеядность форматов
Первое, что впечатляет — это поддержка самых разных форматов. Вы можете не только создавать Xlsx файлы для современного Microsoft Office, но и:
- Читать и писать в старый добрый
Xls. - Работать с открытым форматом
Ods(OpenDocument-таблицы), который использует LibreOffice. - Загружать и сохранять данные в
CSV,HTMLи дажеPDF.
Это делает библиотеку невероятно гибкой. Вам не нужно искать отдельный парсер для CSV и отдельный генератор для Excel — всё уже есть в одной коробке.
2. Полный контроль над стилем
Помните про "красивенький отчет"? С PhpSpreadsheet это не проблема. Вы можете управлять практически любым аспектом внешнего вида документа:
- Шрифты: задавать гарнитуру, размер, цвет, делать текст жирным или курсивом.
- Ячейки: устанавливать цвет фона, рамки, выравнивание текста.
- Форматы данных: указывать, что в ячейке находятся дата, валюта, проценты или просто текст. Excel откроет такой файл и сразу поймет, как отображать данные.
// Пример стилизации ячейки
$spreadsheet->getActiveSheet()
->getStyle('A1')
->getFont()
->setBold(true)
->setColor(new \PhpOffice\PhpSpreadsheet\Style\Color(\PhpOffice\PhpSpreadsheet\Style\Color::COLOR_WHITE));
$spreadsheet->getActiveSheet()
->getStyle('A1')
->getFill()
->setFillType(\PhpOffice\PhpSpreadsheet\Style\Fill::FILL_SOLID)
->getStartColor()->setARGB('FF808080');
Больше не нужно объяснять менеджерам, почему выгрузка выглядит как простая таблица без форматирования.
3. Магия формул без запуска Excel
Это одна из самых мощных фич. Вы можете не просто записывать данные в ячейки, но и вставлять туда настоящие Excel-формулы.
// Вставляем данные и формулу
$sheet->setCellValue('A1', 10);
$sheet->setCellValue('A2', 20);
$sheet->setCellValue('A3', '=SUM(A1:A2)');
Но самое интересное, что PhpSpreadsheet имеет собственный движок для вычисления формул. Вы можете рассчитать результат прямо в PHP-коде, не открывая файл в Excel. Это открывает дорогу для сложных расчетов на стороне сервера, результаты которых можно сразу же отдать пользователю.
4. Миграция — не боль
Разработчики позаботились о тех, кто застрял на старых проектах с PHPExcel. В документации есть подробное руководство по миграции и, что самое ценное, специальный инструмент, который помогает автоматизировать большую часть этого процесса. Так что переход на современную библиотеку будет максимально безболезненным.
Где это использовать на практике?
Теория — это хорошо, но давайте посмотрим, где PhpSpreadsheet может пригодиться в реальных проектах.
- Генерация отчетов. Самый очевидный кейс. Финансовые отчеты, статистика по пользователям, выгрузка заказов из интернет-магазина — всё это становится тривиальной задачей.
- Импорт данных. Загрузка каталогов товаров, прайс-листов от поставщиков, списков пользователей для массовой рассылки. Библиотека позволяет легко итерироваться по строкам и ячейкам, получая данные в удобном виде.
- Автоматизация документооборота. Создание счетов, актов или коммерческих предложений на основе шаблона Excel. Вы можете создать
template.xlsxсо всем оформлением, а затем с помощью PhpSpreadsheet просто заполнять нужные ячейки данными. - Интеграция с BI-системами. Подготовка данных в формате, который легко "скормить" аналитическим системам для дальнейшего анализа и построения дашбордов.
Вердикт
PhpSpreadsheet — это не просто библиотека, это мощная платформа для работы с электронными таблицами в PHP. Она избавляет от головной боли, связанной с генерацией и парсингом сложных файлов, и позволяет сосредоточиться на бизнес-логике, а не на борьбе с форматами.
Кому стоит обратить внимание?
- Backend-разработчикам, которые регулярно сталкиваются с задачами импорта/экспорта данных.
- Разработчикам CRM и ERP-систем, где отчеты — неотъемлемая часть функционала.
- Всем, кто поддерживает старые проекты на PHPExcel. Переход на PhpSpreadsheet — это не просто хороший тон, а необходимость для поддержания проекта в актуальном и безопасном состоянии.
Если вы до сих пор не пробовали PhpSpreadsheet, настоятельно рекомендую добавить его в свой инструментарий. Это тот случай, когда одна удачно выбранная зависимость в composer.json может сэкономить вам сотни часов разработки в будущем.
