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

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

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

Начать курс

Что такое PhpSpreadsheet и зачем он нужен?

PhpSpreadsheet — это мощная PHP-библиотека для работы с электронными таблицами. Она позволяет читать, записывать и редактировать файлы форматов CSV, XLS, XLSX, ODS и других. В отличие от встроенных функций PHP (например, fgetcsv), PhpSpreadsheet предлагает объектно-ориентированный подход, автоматическую обработку кодировок, поддержку стилей, формул и больших объёмов данных. Библиотека идеально подходит для импорта/экспорта данных из веб-форм, генерации отчётов, миграции между базами данных и интеграции с Excel/Google Sheets.

Установка

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

composer require phpoffice/phpspreadsheet

После установки подключите автозагрузку:

require 'vendor/autoload.php';

Основные функции

  • Чтение CSV — загрузка файла в объект Spreadsheet с автоматическим определением разделителя.
  • Запись CSV — создание и сохранение файла с настройкой разделителя, кавычек и BOM.
  • Работа с листами — создание, удаление, переименование и копирование листов.
  • Форматирование — стили ячеек (шрифты, цвета, границы, выравнивание).
  • Формулы и функции — поддержка SUM, AVERAGE, IF и других.
  • Обработка больших данных — потоковая запись через Xlsx Writer для снижения потребления памяти.

Пример кода: чтение и запись CSV

Чтение CSV-файла и вывод данных:

use PhpOffice\PhpSpreadsheet\IOFactory;

$inputFileName = './data.csv';
$spreadsheet = IOFactory::load($inputFileName);
$worksheet = $spreadsheet->getActiveSheet();
$data = $worksheet->toArray();

foreach ($data as $row) {
    echo implode(', ', $row) . "\n";
}

Запись данных в CSV:

use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Csv;

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

$sheet->setCellValue('A1', 'Имя');
$sheet->setCellValue('B1', 'Email');
$sheet->setCellValue('A2', 'Иван');
$sheet->setCellValue('B2', 'ivan@example.com');

$writer = new Csv($spreadsheet);
$writer->setDelimiter(';');
$writer->setEnclosure('"');
$writer->save('./output.csv');

Когда использовать

PhpSpreadsheet рекомендуется в следующих случаях:

  • Необходима поддержка нескольких форматов (CSV, XLSX, ODS) в одном проекте.
  • Требуется точное форматирование (цвета, шрифты, объединение ячеек).
  • Нужно работать с формулами или большими датасетами (более 10 000 строк).
  • Вы предпочитаете ООП-стиль и не хотите писать низкоуровневые парсеры.

Для простых задач (например, чтение одного CSV с известной структурой) можно обойтись встроенными функциями PHP. Но если проект растёт и требует гибкости — PhpSpreadsheet станет незаменимым инструментом.

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