Trabalhando com Excel em PHP: bibliotecas PhpSpreadsheet e OpenSpout

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

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/phpspreadsheet


Exemplo: 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/openspout


Exemplo: 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ísticaPhpSpreadsheetOpenSpout
Formatos suportadosXLSX, XLS, ODS, CSV, HTML, PDFXLSX, CSV, ODS
EstilizaçãoSim (fontes, cores, bordas, preenchimentos)Limitada (apenas estilos básicos)
FórmulasSimNão
GráficosSimNão
Consumo de memóriaAlto (carrega tudo na RAM)Baixo (processamento em fluxo)
VelocidadeMédiaAlta
Ideal paraArquivos pequenos/médios com formatação complexaArquivos 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!

Recommendations