Увійти Реєстрація
Блог Серії
Кар'єра
Вакансії Компанії
Навчання
Документація Співбесіди Тестування Відео
Екосистема
Пакети Ресурси Проєкти Інструменти Події
Інше
Про нас Реклама
Новини 23 вересня 2026

Fast Excel 5.x: потоковий імпорт та безпечний експорт даних

Пакет Fast Excel зазнав суттєвих змін з моменту огляду Laravel News у 2020 році. Тоді йшлося про версію 2.2 з можливістю експорту колекцій, завантаження файлів у браузері та роботи з багатоаркушними книгами. Fast Excel 5 тепер включає ледачий імпорт, інструменти для розподілу роботи зі spreadsheet між джобами, вибір аркушів і колонок, а також безпечнішу обробку експортованих значень, які контролюються користувачами.

Останні релізи роблять Fast Excel більш придатним для великих операційних імпортів, а не лише простих звітів. Пакет як і раніше використовує OpenSpout замість спроб охопити всі можливості формату Excel, що дозволяє зосередитися на читанні та записі рядків з низьким споживанням пам'яті.

Ключові можливості версії 5.x

  • importLazy() - читає рядки через LazyCollection
  • headerRow(), startRow() та limitRows() - підтримують chunked імпорт
  • sheet() та onlyColumns() - вибирають потрібні дані для імпорту
  • escapeFormulas() - записує формулоподібні значення як текст

Ледачий імпорт для великих файлів

Метод import() повертає колекцію, що містить усі імпортовані рядки. Для великого завантаження це може використовувати більше пам'яті, ніж доступно PHP-процесу. importLazy() видає рядки через LazyCollection, тому застосунок може батчити роботу з базою даних без утримання всього файлу в пам'яті:

use App\Models\Contact;
use Illuminate\Support\LazyCollection;
use Rap2hpoutre\FastExcel\FastExcel;

(new FastExcel)->importLazy('contacts.xlsx')
    ->chunk(1_000)
    ->each(function (LazyCollection $contacts) {
        Contact::insert($contacts->all());
    });

Fast Excel 5.12 представив importLazy() разом зі змінами потокового експорту. Власний бенчмарк пакета порівнює експорт через генератор з матеріалізованою колекцією. Для імпорту CSV такий підхід може замінити частину ручного парсингу, який використовується при обробці великих CSV-файлів.

Chunked імпорт зі стабільними заголовками

Новіші засоби імпорту допомагають, коли один queued джоб повинен обробити частину spreadsheet. headerRow() зчитує ключі з фактичного рядка заголовків, тоді як startRow() вибирає, де починається поточний chunk, а limitRows() обмежує його розмір:

use Rap2hpoutre\FastExcel\FastExcel;

$rows = (new FastExcel)
    ->headerRow(1)
    ->startRow(2 + ($page * 1_000))
    ->limitRows(1_000)
    ->import('orders.xlsx');

До Fast Excel 5.17 метод startRow() також трактував обраний рядок як заголовки. Тому наступний chunk міг використовувати рядок даних як ключі. headerRow() розділяє ці позиції та залишає стару поведінку startRow() незмінною, якщо ви не активуєте нову логіку явно. Метод додано в pull request #418.

Вибір аркушів та колонок

Пакет може вибирати аркуш за назвою та зберігати лише потрібні для імпорту колонки:

use Rap2hpoutre\FastExcel\FastExcel;

$orders = (new FastExcel)
    ->sheet('Orders')
    ->onlyColumns(['A', 'B', 'H'])
    ->import('customer-export.xlsx');

onlyColumns() приймає літери колонок або позиції на основі одиниці. Це дозволяє уникнути повернення порожніх полів з аркушів, де форматування було застосовано далеко за межами реальних даних. limitColumns() доступний, коли імпорт потребує всіх колонок до певної позиції. Ці опції з'явилися у Fast Excel 5.16, яка також додала можливість передавати екземпляр OpenSpout cell як значення експорту (pull request #419).

Екранування spreadsheet формул

Додатки для роботи з електронними таблицями можуть інтерпретувати значення, що починаються з =, +, - або @, як формули. Коли ці значення походять із завантаженого CSV або поля бази даних, контрольованого користувачами, експорт звіту може перетворити простий текст на формулу при відкритті файлу.

Викличте escapeFormulas() перед експортом, щоб записати ці значення як текст:

use Rap2hpoutre\FastExcel\FastExcel;

(new FastExcel($rows))
    ->escapeFormulas()
    ->export('orders.xlsx');

Fast Excel 5.17 додав цей метод у pull request #411.

Сумісність та встановлення

Fast Excel 5 вимагає PHP 8.0 або новішої версії та Laravel 6 або новішої. Поточний реліз підтримує Laravel 6-13 і використовує OpenSpout 4. Застосунки, які все ще використовують Laravel 5 або PHP 7, підтримувані Fast Excel 2, повинні окремо планувати оновлення залежностей.

Історія основних версій включає перехід від box/spout до openspout/openspout та вимогу PHP 8 у Fast Excel 5. Проєкти, що використовують ранні релізи Fast Excel, повинні перевірити ці зміни залежностей перед оновленням.

Встановлення Fast Excel через Composer:

composer require rap2hpoutre/fast-excel

Документація та вихідний код доступні в репозиторії GitHub проєкту.

4

Читати в документації

Коментарі

Увійдіть, щоб залишити коментар

Будьте першим, хто залишить коментар!

Читайте також

Cache Tags
Новини 26 вересня 2026

Мемоізація читання тегованого кешу в Laravel

Laravel 13.33 додає підтримку тегів до мемоізованого кешу Cache::memo(). Тепер можна ефективно зберігати теговані значення в пам'яті протягом запиту, що особливо корисно для частих операцій перевірки прав доступу та налаштувань.

15
JetBrains Air
Новини 26 вересня 2026

JetBrains Air: запуск AI-агентів у середовищі розробки JetBrains

JetBrains представила JetBrains Air - екосистему продуктів для роботи з AI-агентами в IDE. Система включає безкоштовний плагін для PhpStorm, хмарну платформу для команд та інструменти управління для організацій, підтримуючи агентів від різних провайдерів.

16

Вакансії за темою

N-iX Нова
3 дні тому

Senior/ Lead FullStack Engineer

Senior/Lead FullStack розробник для європейського інтернет-маркетплейсу автомобілів. Проектуватимете й розвиватимете масштабовані сервіси на PHP (Laravel), JavaScript, TypeScript з активним використанням AI-інструментів. Основні вимоги: 6-8 років досвіду бекенда, глибокі знання Laravel, AWS, CI/CD, архітектури розподілених систем, вміння керувати складними технічними ініціативами.

Median ads Нова
3 дні тому

Full Stack Developer (PHP / WordPress / React)

Full Stack розробник для створення та підтримки вебпроєктів. Основний стек: PHP (Laravel), WordPress, React (базовий рівень), REST API. Вимоги: комерційний досвід 6 місяців–2 років, верстка лендингів, робота з VPS (деплой, SSH), самостійне розв'язання задач. Пропозиції: віддалена робота, фіксована ставка + бонуси, 24 робочих дні відпустки, навчання.

Rifbar Нова
3 дні тому

Back-end developer (PHP, Laravel)

Розробник на PHP Laravel для реалізації серверної логіки, оптимізації баз даних та розробки REST API. Основний стек: PHP 8+, Laravel 11, MySQL, Docker. Вимоги: глибоке знання SQL, ООП, SOLID, досвід з Eloquent ORM та Query Builder, робота з великими обсягами даних.

Пакети за темою

Bagisto

bagisto/bagisto

Bagisto — це платформа для електронної комерції, побудована на Laravel. Вона надає готове рішення для створення та управління інтернет-магазинами з підтримкою каталогу товарів, замовлень, платежів та клієнтів.

28,157 v2.5.0-beta4 13 26

Lang

laravel-lang/lang

Список 126 мов для Laravel Framework, Laravel Jetstream, Laravel Fortify, Laravel Breeze, Laravel Cashier, Laravel Nova, Laravel Spark та Laravel UI.

7,776 15.37.1 12