Работа с Excel в PHP: библиотеки PhpSpreadsheet и OpenSpout

Онлайн-тренажер Python для начинающих

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

Начать курс

Работа с Excel в PHP: обзор библиотек PhpSpreadsheet и OpenSpout

Работа с электронными таблицами Excel — одна из самых частых задач в веб-разработке на PHP. Будь то генерация отчётов, импорт данных из бухгалтерских систем или экспорт статистики для клиентов — без инструментов для работы с форматами .xlsx и .xls не обойтись. В этой статье мы рассмотрим две самые популярные PHP-библиотеки: PhpSpreadsheet (преемник знаменитой PHPExcel) и OpenSpout (лёгкая альтернатива для больших файлов).

PhpSpreadsheet — мощный и функциональный инструмент

PhpSpreadsheet — это библиотека от проекта PHPOffice, которая позволяет читать, создавать и модифицировать файлы Excel (XLSX, XLS, ODS, CSV и другие). Она поддерживает стилизацию ячеек, формулы, диаграммы, условное форматирование и даже работу с макросами.

Установка PhpSpreadsheet

Установка выполняется через Composer:

composer require phpoffice/phpspreadsheet

Пример: создание простого Excel-файла

<?php
require 'vendor/autoload.php';

use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;

$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();

// Заполняем данные
$sheet->setCellValue('A1', 'ID');
$sheet->setCellValue('B1', 'Имя');
$sheet->setCellValue('C1', 'Email');
$sheet->setCellValue('A2', 1);
$sheet->setCellValue('B2', 'Иван Петров');
$sheet->setCellValue('C2', 'ivan@example.com');

// Стилизация заголовка
$styleArray = [
    'font' => ['bold' => true, 'size' => 14],
    'fill' => ['fillType' => 'solid', 'startColor' => ['rgb' => 'E0E0E0']]
];
$sheet->getStyle('A1:C1')->applyFromArray($styleArray);

// Сохраняем файл
$writer = new Xlsx($spreadsheet);
$writer->save('users.xlsx');
echo "Файл users.xlsx создан!";
?>

Чтение существующего Excel-файла

<?php
require 'vendor/autoload.php';

use PhpOffice\PhpSpreadsheet\IOFactory;

$inputFileName = 'users.xlsx';
$spreadsheet = IOFactory::load($inputFileName);
$sheet = $spreadsheet->getActiveSheet();

foreach ($sheet->getRowIterator() as $row) {
    $cellIterator = $row->getCellIterator();
    $cellIterator->setIterateOnlyExistingCells(false);
    $rowData = [];
    foreach ($cellIterator as $cell) {
        $rowData[] = $cell->getValue();
    }
    echo implode(' | ', $rowData) . "<br>";
}
?>

OpenSpout — лёгкость и скорость для больших данных

OpenSpout — это библиотека, созданная для работы с большими объёмами данных (сотни тысяч строк). В отличие от PhpSpreadsheet, она не загружает весь файл в память, а обрабатывает его потоково. Это делает её идеальной для экспорта/импорта объёмных отчётов. OpenSpout поддерживает форматы XLSX, CSV и ODS.

Установка OpenSpout

composer require openspout/openspout

Пример: экспорт 100 000 строк в XLSX

<?php
require 'vendor/autoload.php';

use OpenSpout\Writer\XLSX\Writer;

$writer = new Writer();
$writer->openToFile('big_export.xlsx');

// Заголовки
$writer->addRow(['ID', 'Имя', 'Email']);

for ($i = 1; $i <= 100000; $i++) {
    $writer->addRow([$i, "Пользователь $i", "user$i@example.com"]);
}

$writer->close();
echo "Файл big_export.xlsx с 100 000 строк создан!";
?>

Чтение большого файла с OpenSpout

<?php
require 'vendor/autoload.php';

use OpenSpout\Reader\XLSX\Reader;

$reader = new Reader();
$reader->open('big_export.xlsx');

foreach ($reader->getSheetIterator() as $sheet) {
    foreach ($sheet->getRowIterator() as $row) {
        $cells = $row->getCells();
        echo implode(' | ', array_map(function($cell) {
            return $cell->getValue();
        }, $cells)) . "<br>";
    }
}

$reader->close();
?>

Сравнение PhpSpreadsheet и OpenSpout

    <

Рекомендаций