PHP → Уменьшение памяти при чтении больших XLS файлов в PhpSpreadsheet

15.02.2025

Если попытаться загрузить 8-и мегабайтный excel файл с несколькими листами используя \PhpOffice\PhpSpreadsheet\IOFactory::load($file_path), то PhpSpreadsheet сожрёт около 500M памяти =\ И этого просто загрузка, без чтения данных и итерации по ячейкам.

Приводим его в чувства:

$reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReaderForFile($file_path);

// Отключаем обработку стилей, форматирования, объединений ячеек и прочего.
$reader->setReadDataOnly(TRUE);
// Отключаем чтение пустых ячеек. $cell->getValue() будет возвращать NULL вместо ''.
$reader->setReadEmptyCells(FALSE);
// Грузим только нужные листы.
$reader->setLoadSheetsOnly([$sheet_name]);

$spreadsheet = $reader->load($file_path);
$worksheet = $spreadsheet->getSheetByName($sheet_name);

Итог — 45 мегабайт.

Написанное актуально для
PhpSpreadsheet 4.x
Похожие записи

Добавить комментарий