Trabalhando com Excel em PHP: visão geral das bibliotecas PhpSpreadsheet e OpenSpout
Trabalhar com planilhas Excel é uma das tarefas mais comuns no desenvolvimento web com PHP. Seja para gerar relatórios, importar dados de sistemas contábeis ou exportar estatísticas para clientes — não há como prescindir de ferramentas para trabalhar com os formatos .xlsx e .xls. Neste artigo, veremos as duas bibliotecas PHP mais populares: PhpSpreadsheet (sucessora da famosa PHPExcel) e OpenSpout (uma alternativa leve para arquivos grandes).
PhpSpreadsheet — uma ferramenta poderosa e funcional
PhpSpreadsheet é uma biblioteca do projeto PHPOffice que permite ler, criar e modificar arquivos Excel (XLSX, XLS, ODS, CSV e outros). Ela suporta estilização de células, fórmulas, gráficos, formatação condicional e até mesmo trabalho com macros.
Instalação do PhpSpreadsheet
A instalação é feita via Composer:
composer require phpoffice/phpspreadsheetExemplo: criando um arquivo Excel simples
<?phprequire 'vendor/autoload.php';
use PhpOffice\\PhpSpreadsheet\\Spreadsheet;use PhpOffice\\PhpSpreadsheet\\Writer\\Xlsx;
$spreadsheet = new Spreadsheet();$sheet = $spreadsheet->getActiveSheet();
// Preenchendo os dados$sheet->setCellValue('A1', 'ID');$sheet->setCellValue('B1', 'Nome');$sheet->setCellValue('C1', 'Email');$sheet->setCellValue('A2', 1);$sheet->setCellValue('B2', 'João Silva');$sheet->setCellValue('C2', 'joao@example.com');
// Estilizando o cabeçalho$styleArray = [ 'font' => ['bold' => true, 'size' => 14], 'fill' => ['fillType' => 'solid', 'startColor' => ['rgb' => 'E0E0E0']]];$sheet->getStyle('A1:C1')->applyFromArray($styleArray);
// Salvando o arquivo$writer = new Xlsx($spreadsheet);$writer->save('usuarios.xlsx');echo "Arquivo usuarios.xlsx criado!";?>Lendo um arquivo Excel existente
<?phprequire 'vendor/autoload.php';
use PhpOffice\\PhpSpreadsheet\\IOFactory;
$inputFileName = 'usuarios.xlsx';$spreadsheet = IOFactory::load($inputFileName);$sheet = $spreadsheet->getActiveSheet();
foreach ($sheet->getRowIterator() as $row) { $cellIterator = $row->getCellIterator(); $cellIterator->setIterateOnlyExistingCells(false); $rowData = []; foreach ($cellIterator as $cell) { $rowData[] = $cell->getValue(); } echo implode(' | ', $rowData) . "<br>";}?>OpenSpout — leveza e velocidade para grandes volumes de dados
OpenSpout é uma biblioteca criada para trabalhar com grandes volumes de dados (centenas de milhares de linhas). Ao contrário do PhpSpreadsheet, ela não carrega o arquivo inteiro na memória, mas o processa em fluxo. Isso a torna ideal para exportar/importar relatórios volumosos. O OpenSpout suporta os formatos XLSX, CSV e ODS.
Instalação do OpenSpout
composer require openspout/openspoutExemplo: exportando 100.000 linhas para XLSX
<?phprequire 'vendor/autoload.php';
use OpenSpout\\Writer\\XLSX\\Writer;
$writer = new Writer();$writer->openToFile('grande_exportacao.xlsx');
// Cabeçalhos$writer->addRow(['ID', 'Nome', 'Email']);
for ($i = 1; $i <= 100000; $i++) { $writer->addRow([$i, "Usuário $i", "usuario$i@example.com"]);}
$writer->close();echo "Arquivo grande_exportacao.xlsx com 100.000 linhas criado!";?>Lendo um arquivo grande com OpenSpout
<?phprequire 'vendor/autoload.php';
use OpenSpout\\Reader\\XLSX\\Reader;
$reader = new Reader();$reader->open('grande_exportacao.xlsx');
foreach ($reader->getSheetIterator() as $sheet) { foreach ($sheet->getRowIterator() as $row) { $cells = $row->getCells(); echo implode(' | ', array_map(function($cell) { return $cell->getValue(); }, $cells)) . "<br>"; }}
$reader->close();?>Comparação: PhpSpreadsheet vs OpenSpout
| Característica | PhpSpreadsheet | OpenSpout |
|---|---|---|
| Formatos suportados | XLSX, XLS, ODS, CSV, HTML, PDF | XLSX, CSV, ODS |
| Estilização | Sim (fontes, cores, bordas, preenchimentos) | Limitada (apenas estilos básicos) |
| Fórmulas | Sim | Não |
| Gráficos | Sim | Não |
| Consumo de memória | Alto (carrega tudo na RAM) | Baixo (processamento em fluxo) |
| Velocidade | Média | Alta |
| Ideal para | Arquivos pequenos/médios com formatação complexa | Arquivos grandes com dados simples |
Conclusão
A escolha entre PhpSpreadsheet e OpenSpout depende das suas necessidades:
- Use PhpSpreadsheet se você precisa de formatação rica, fórmulas, gráficos ou trabalha com arquivos de até algumas dezenas de milhares de linhas.
- Escolha OpenSpout se você processa centenas de milhares de linhas e a velocidade e o consumo de memória são críticos.
Ambas as bibliotecas são excelentes e amplamente utilizadas na comunidade PHP. Comece com a que melhor se adequa ao seu projeto e bons códigos!
Também na biblioteca
Migrações de banco de dados em C++: visão geral de ferramentas e bibliotecas
gRPC C++: Guia completo com exemplos práticos para C++