Увійти Реєстрація
Блог Серії
Кар'єра
Вакансії Компанії
Навчання
Документація Співбесіди Тестування Відео
Екосистема
Пакети Ресурси Проєкти Інструменти Події
Інше
Про нас Реклама
Новини 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 проєкту.

7

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

Коментарі

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

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

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

Laravel AI SDK на практиці
Новини 09 жовтня 2026

Laravel AI SDK на практиці: агент, що стоїть за There There

Фрік Ван дер Гертен розповідає, як у Spatie побудували AI-шар хелпдеска There There на Laravel AI SDK: клас агента, інструменти з типізованою JSON-схемою та делегування роботи звичайним domain-діям.

9
CSRF і завантаження
Новини 09 жовтня 2026

Порада з безпеки: як завантаження файлів може обійти захист від CSRF

Стівен Ріс-Картер пояснює, чому файли користувачів варто віддавати з окремого домену: HTML і JS у межах основного застосунку дають доступ до cookie та CSRF-токенів.

18

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

N-iX Нова
Вчора

Senior/ Lead PHP Engineer (with AI Skills) (#5828)

Розробка та підтримка backend-сервісів і API на PHP та Laravel з повним циклом володіння фічами від дизайну до моніторингу. Ключове завдання - інтеграція агентних AI-workflow (LLM-агенти, tool calling) у продукт і внутрішні інструменти, а також менторство інших інженерів. Вимоги: 6+ років PHP, 4+ роки з Laravel, досвід GenAI, знання MySQL/PostgreSQL, Docker та хмарних платформ, робота за часовим поясом EDT.

Full Stack Developer (middle+)

Full Stack розробник розвиватиме та підтримуватиме вебпродукти FinTech-компанії: доопрацьовуватиме backend і frontend, функціонал особистого кабінету клієнта, інтеграції через REST API з платіжними та ідентифікаційними сервісами. Ключовий стек: PHP, Laravel, Vue.js (Vue Router, Pinia або Vuex), MySQL/PostgreSQL, Docker, Git. Вимоги: понад 3 роки комерційного Full Stack досвіду, робота з наявним кодом, участь у code review та розборі інцидентів.

Bulls-media Нова
2 дні тому

Junior+ Full Stack Developer

Розробник PHP/Laravel для роботи на фулстеку: розробка та підтримка бекенду на PHP/Laravel і фронтенду на JavaScript/HTML/CSS. Основний стек: PHP, Laravel, MySQL, REST API, Git. Вимоги: 1+ років досвіду в веб-розробці, хороше знання PHP, базово-проміжна рівень Laravel, розуміння JavaScript, HTML/CSS, REST API та OOP. Менторство від досвідчених розробників, робота з реальними комерційними проєктами.

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

Bagisto

bagisto/bagisto

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

28,221 v2.5.0 13 26

Lang

laravel-lang/lang

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

7,778 15.37.3 12