Otimizando exportação com Fast-Excel

Posted on: March 16, 2026 01:30 AM

Posted by: Renato

Categories: Laravel

Views: 23

Otimizando exportação com Fast-Excel
 

A biblioteca rap2hpoutre/fast-excel é uma das ferramentas mais populares e eficientes no ecossistema Laravel para manipulação de arquivos Excel (.xlsx) e CSV.

Ela foi criada como uma alternativa leve ao "Laravel Excel" (Maatwebsite), focando em velocidade e baixo consumo de memória, o que a torna ideal para o seu caso, onde você está exportando listas de pedidos que podem crescer significativamente.


Por que usar o Fast-Excel?

  1. Performance: Ao contrário de outras bibliotecas que carregam todos os dados na memória antes de gerar o arquivo, o Fast-Excel utiliza "generators" (streams). Isso significa que ele consegue processar milhares de linhas sem estourar o limite de memória do PHP.

  2. Simplicidade: A API é extremamente direta. Você não precisa criar classes de "Export" complexas para tarefas simples.

  3. Flexibilidade: Aceita Collections, Models, QueryBuilders e até Arrays puros.


Como você está utilizando no seu Controller

No seu código, a implementação está no método getExportedExcelFile. Vamos analisar os pontos principais:

PHP

private function getExportedExcelFile(QueryBuilder $query): StreamedResponse
{
    // ... lógica de permissões ...

    // O FastExcel recebe o resultado da query e gera o download
    return (new FastExcel($query->get()))->download('arquivo.xlsx', function ($item) {
        // O "Closure" (função anônima) define o mapeamento das colunas
        return [
            'ID do pedido' => $item->client_orders_uuid,
            // ...
        ];
    });
}

Pontos de Melhoria no seu uso:

  1. Uso de Memória com ->get(): Atualmente você está fazendo $query->get(). Se houver 50 mil pedidos, o Laravel tentará carregar 50 mil instâncias de modelos na memória de uma vez. O FastExcel suporta Generators. Para grandes volumes, você poderia usar o cursor():

    PHP

    return (new FastExcel($query->cursor()))->download(...);
    

    Isso mantém o consumo de memória baixo e constante, não importa o tamanho da tabela.

  2. Eager Loading: No seu index(), você já está usando o with(['user', 'items...']). Isso é excelente para evitar o problema de "N+1" consultas durante a exportação das linhas no Excel.


Outras formas de utilizar a biblioteca

Além do que você já faz, aqui estão outras funcionalidades úteis:

1. Importação de Dados

Se você precisar que o usuário envie uma planilha para atualizar pedidos ou cadastrar produtos:

PHP

use Rap2hpoutre\FastExcel\FastExcel;

$users = (new FastExcel)->import('arquivo.xlsx', function ($line) {
    return User::create([
        'name' => $line['Nome'],
        'email' => $line['E-mail']
    ]);
});

2. Exportação de múltiplas abas (Sheets)

Se quiser separar pedidos por status em abas diferentes no mesmo arquivo:

PHP

$sheets = new SheetCollection([
    'Pagos' => Order::where('status', 'paid')->get(),
    'Pendentes' => Order::where('status', 'pending')->get(),
]);

return (new FastExcel($sheets))->download('relatorio.xlsx');

3. Salvando no disco (Storage)

Em vez de baixar direto pelo navegador (download), você pode salvar no servidor para enviar por e-mail depois:

PHP

(new FastExcel($query->get()))->export(storage_path('app/public/pedidos.xlsx'));

Resumo de boas práticas para o seu Controller:

  • Tratamento de Datas: Você usou $item->created_at->isoFormat(...). Isso é ótimo, pois garante que o Excel exiba a data legível, e não um objeto ou timestamp.

  • Campos Calculados: Você chamou $item->brazilianAmountByTypeUser(...). Certifique-se de que esses métodos no seu Model Order não façam novas consultas ao banco de dados, senão a exportação ficará lenta.

  • Colunas Complexas: Para o "Nome do produto", você usou implode. Como um pedido pode ter vários itens, essa é a forma correta de condensar isso em uma única célula do Excel.


2

Share

Donate to Site


About Author

Renato

Developer

Add a Comment
Comments 0 Comments

No comments yet! Be the first to comment

Blog Search


Categories

Laravel (227) PHP (151) linux (124) Variados (110) ubuntu (58) Dicas (58) developer (48) postgresql (45) database (44) sql (42) Docker (32) front-end (31) mysql (31) devops (26) webdev (24) programming (23) tecnologia (19) eloquent (19) aws (19) dba (18) OUTROS (17) backend (16) laravelphp (16) debian (12) dev (12) 100DaysOfCode (10) git (10) react (10) reactjs (10) inteligencia-artificial (9) PHP Swoole (9) node (9) javascript (9) nginx (9) Architecture (8) linux-tools (8) vue (7) github (7) ciencia (7) webservice (6) jwt (6) vim (6) windows (6) arquitetura (6) nodejs (6) api (6) vscode (6) reactnative (5) rest (5) DevSecOps (5) servers (5) apache (5) macox (5) s3 (5) authentication (5) ia (5) shell (4) mongodb (4) angular (4) autenticacao (4) wsl (4) Swoole (4) lets-encrypt (4) query (4) Raspberry (4) angularjs (4) inteligenciadedados (4) Padrao de design (4) artigo (4) google (4) npm (4) openai (4) Kubernetes (4) gitlab (4) opensource (4) mariadb (4) jenkins (4) json (3) authorization (3) phpswoole (3) ddd (3) blade (3) terminal (3) log (3) mac (3) fedora (3) containers (3) ssh (3) bash (3) hardware (3) tests (3) macos (3) web (2) jobs (3) websocket (3) db (3) politica (3) js (3) mysqli (3) Black Hat (3) RabbitMQ (3) educacao (3) intel (3) CMS (2) sail (3) script (3) performance (3) bancodedados (2) tailwind (2) homeOffice (2) html (2) openswoole (2) artificialintelligence (2) security (2) seguranca (2) auth (2) cron (2) phpunit (2) kube (2) multiple_authen (2) policia (2) neovim (2) golang (2) noticias (2) livros (2) Transcribe (2) ElonMusk (2) redis (2) claude (2) ArchLinux (2) java (2) saude (1) phpfpm (2) autorizacao (2) monitoring (2) laptop (2) gnome (2) powerbi (2) telefonia (2) nvm (2) imagick (2) maps (2) colors (2) Passport (2) JQuery (2) Curisidades (2) Solid (2) zsh (2) Go (2) BigLinux (2) POO (2) LazyVim (2) gource (2) Python (2) Oauth2 (2) android (2) unix (2) magento (2) iot (2) ffmpeg (2) combustivel (2) webhook (2) microservices (2) Migration (1) workflow (1) cqrs (1) kitematic (1) geospacial (1) yeshua (1) data (1) sonarqube (1) Axios (1) pipelines (1) Mozilla (1) kvm (1) GitOps (1) sqlite (1) podcast (1) n8n (1) LaravelFilament (1) God (1) DesenvolvimentoProfissional (1) sw (1) bigtech (1) postgres (1) NoCookies (1) LeetCode (1) governancadedados (1) prf (1) nosql (1) Lideranca (1) Hackers (1) Bots (1) pytorch (1) nuxt (1) liquid (1) ec2 (1) transaction (1) c4 (1) rancher (1) algoritimo (1) Observability (1) Elasticsearch (1) translate (1) certbot (1) Oh My Zsh (1) ibm (1) escopos (1) usb (1) ckeditor (1) API_KEY_GOOGLE_MAPS (1) Manjaro (1) vicuna (1) coding (1) rust (1) markdown (1) JasperReports (1) Fibonacci (1) community (1) Samurai (1) payment (1) messaging (1) Jesus (1) flutter (1) militar (1) fullsta (1) smartphones (1) automacao (1) Monitor (1) zend (1) spaceship (1) PKCE (1) l2tp (1) Glacier (1) laraveloctane (1) Deus (1) binaural (1) gpt (1) bolsonaro (1) privacidade (1) linkedin (1) documentation (1) brain (1) adb (1) nvidia (1) host (1) ecommerce (1) c4-models (1) altadisponibilidade (1) octane (1) lucena (1) http (1) TypeScript (1) chatgpt (1) idiomas (1) eventdrive (1) uuid (1) restfull (1) aplicativo (1) optimization (1) mapas (1) Fetch (1) collections (1) RustLang (1) matematica (1) Filament (1) compactar (1) paypal (1) microg (1) forcas armadas (1) front (1) cor (1) auth (1) modelagemdedados (1) k8s (1) gasolina (1) wsl2 (1) csv (1) soap (1) piada (1) KubeCon (1) zorin-os (1) spring-boot (1) backup (1) playwright (1) Deepin (1) storage (1) benchmark (1) networking (1) Swoole (1) biologia (1) node-red (1) LETSENCRYPT (1) Grunt (1) Diagramas (1) boot (1) haru (1) dracula (1) TrabalhoEmEquipe (1) Brasil (1) queue (1) agi (1) llama (1) hotfix (1) economia (1) transcription (1) cache (1) Amazon (1) October (1) lumen (1) Hyperf (1) replication (1) faceapp (1) vala (1) cloudstack (1) rpi (1) apple (1) oracle (1) iode (1) ffaa (1) vpn (1) MeioAmbiente (1) firefox (1) composer (1) scheduling (1) Asahi (1) pendrive (1) microservice (1) front (1) wine (1) covid19 (0) services (1) phpjasper (1) models (1) kali-linux (1) geojson (1) yarn (1) picpay (1) Monolith (1) banco (1) PNPM (1) Desenvolvedor (1) Structurizr (1) symfony (1) presenter (1) lider (1) guard (1) tensorflow (1) bootstrap (1) nuance (1) historia (1) dropbox (1) traefik (1) bug (1) akitando (1) llm (1) htm (1) transformers (1) cavalotroia (1) odd (1) m1 (1) Error (1) cinnamon (1) repmgr (1) federal (1) ruby (1) AppSec (1) orm (1) ArquiteturaDeSoftware (1) Passwordless (1) memcached (1) flow (1) compression (1) athena (1) controllers (0) OOD (0)

New Articles



Get Latest Updates by Email