---
title: "Fast Excel 5.x: потоковий імпорт та безпечний експорт даних"
url: https://laravelukraine.com/blog/fast-excel-5x-potokovii-import-ta-bezpecnii-eksport-danix
date: 2026-09-23
source: https://laravel-news.com/fast-excel-5-x
---

# 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`, тому застосунок може батчити роботу з базою даних без утримання всього файлу в пам'яті:

```php
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()` обмежує його розмір:

```php
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.

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

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

```php
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()` перед експортом, щоб записати ці значення як текст:

```php
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:

```bash
composer require rap2hpoutre/fast-excel
```

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