Publicado em: 17, março 2025
No desenvolvimento de aplicações Laravel, frequentemente precisamos lidar com planilhas — seja para exportar relatórios ou importar grandes quantidades de dados. O pacote Laravel Excel, criado pela Spartner, simplifica esse processo ao integrar o poder do PhpSpreadsheet com a elegância do Laravel. Neste tutorial, vamos explorar como instalar e usar o Laravel Excel para importar uma lista de usuários de um arquivo Excel e exportar dados do banco de dados para uma planilha. Vamos lá!
Primeiro, instale o Laravel Excel via Composer:
composer require maatwebsite/excel
Se você estiver usando Laravel 12.x, o pacote será registrado automaticamente graças ao recurso de auto-descoberta. Caso contrário (em versões mais antigas), adicione o provedor de serviço ao config/app.php:
'providers' => [ Maatwebsite\\Excel\\ExcelServiceProvider::class, ],
E, opcionalmente, publique o arquivo de configuração:
php artisan vendor:publish --provider="Maatwebsite\\Excel\\ExcelServiceProvider" --tag=config
Para este tutorial, vamos assumir que temos uma tabela users com os campos name, email, created_at e updated_at. Certifique-se de que o modelo User está configurado e que a tabela existe no banco de dados.
Crie a migration, se necessário:
php artisan make:migration create_users_table
Edite o arquivo de migração:
Schema::create('users', function (Blueprint $table) { $table->id(); $table->string('name'); $table->string('email')->unique(); $table->timestamps(); });
Execute a migração:
php artisan migrate
Vamos criar uma classe para exportar todos os usuários do banco para um arquivo Excel.
Crie a exportação com o Artisan:
php artisan make:export UsersExport --model=User
Edite o arquivo gerado em app/Exports/UsersExport.php:
namespace App\\Exports; use App\\Models\\User; use Maatwebsite\\Excel\\Concerns\\FromCollection; use Maatwebsite\\Excel\\Concerns\\WithHeadings; class UsersExport implements FromCollection, WithHeadings { public function collection() { return User::select('name', 'email')->get(); } public function headings(): array { return ['Nome', 'E-mail']; } }
Aqui, definimos:
Agora, crie uma rota em routes/web.php:
use App\\Exports\\UsersExport; use Maatwebsite\\Excel\\Facades\\Excel; Route::get('/export-users', function () { return Excel::download(new UsersExport, 'usuarios.xlsx'); });
Acesse /export-users no navegador, e o arquivo usuarios.xlsx será baixado com os dados da tabela.
Agora, vamos importar usuários de um arquivo Excel para o banco de dados.
Crie a classe de importação:
php artisan make:import UsersImport --model=User
Edite o arquivo em app/Imports/UsersImport.php:
namespace App\\Imports; use App\\Models\\User; use Maatwebsite\\Excel\\Concerns\\ToModel; use Maatwebsite\\Excel\\Concerns\\WithHeadingRow; class UsersImport implements ToModel, WithHeadingRow { public function model(array $row) { return new User([ 'name' => $row['nome'], 'email' => $row['email'], 'created_at' => now(), 'updated_at' => now(), ]); } }
Crie uma rota para importar:
use App\\Imports\\UsersImport; use Maatwebsite\\Excel\\Facades\\Excel; Route::post('/import-users', function () { Excel::import(new UsersImport, request()->file('file')); return redirect()->back()->with('success', 'Usuários importados com sucesso!'); });
E um formulário simples em uma view (ex.: resources/views/import.blade.php):
<form method="POST" action="/import-users" enctype="multipart/form-data"> @csrf <input type="file" name="file" accept=".xlsx, .xls"> <button type="submit">Importar</button> @if (session('success')) <p>{{ session('success') }}</p> @endif </form>
Prepare um arquivo Excel com colunas "Nome" e "E-mail", envie-o pelo formulário, e os dados serão inseridos no banco.
Para arquivos grandes, use o recurso de "chunking" para reduzir o uso de memória. Atualize o UsersImport.php:
use Maatwebsite\\Excel\\Concerns\\WithChunkReading; class UsersImport implements ToModel, WithHeadingRow, WithChunkReading { public function model(array $row) { return new User([ 'name' => $row['nome'], 'email' => $row['email'], 'created_at' => now(), 'updated_at' => now(), ]); } public function chunkSize(): int { return 1000; *// Processa 1000 linhas por vez* } }
Isso faz com que o Laravel Excel leia o arquivo em blocos, evitando problemas de desempenho.
O Laravel Excel é uma ferramenta indispensável para quem precisa manipular planilhas no Laravel. Com poucos passos, você pode exportar relatórios e importar dados de forma eficiente, mesmo em cenários com grandes volumes de informação. Experimente personalizar as exportações com estilos ou integrar com filas (queues) para processos assíncronos. Agora que você conhece o básico, que tal aplicar isso ao seu próximo projeto?
Mais de 10 anos de experiência com Laravel e sólidos conhecimentos em frameworks front-end, como ReactJS, React Native e Vue JS. Experiência em Design de Serviço. No primeiro projeto profissional como júnior, desenvolveu em e-commerce para a maior indústria de equipamentos odontológicos da América Latina. Atualmente, atua como Full Stack Engineer Specialist em uma grande multinacional. Lidera decisões técnicas e é um suporte fundamental para a equipe de desenvolvimento.