Trabalhando com Excel em PHP: visão geral das melhores bibliotecas
O processamento de planilhas é uma das tarefas comuns no desenvolvimento web. Em PHP, existem várias ferramentas testadas para criar, ler e editar arquivos Excel. Neste artigo, veremos duas bibliotecas principais: PhpSpreadsheet (sucessora do popular PHPExcel) e a leve OpenSpout, projetada para escrita e leitura rápidas de arquivos grandes.
1. Instalação via Composer
Ambas as bibliotecas são instaladas pelo gerenciador de pacotes padrão Composer. Execute no terminal na raiz do projeto:
# Para PhpSpreadsheet (funcionalidade completa para Excel)composer require phpoffice/phpspreadsheet
# Para OpenSpout (alta performance em grandes volumes de dados)composer require openspout/openspoutApós a instalação, inclua o autoload no início do script:
require_once __DIR__ . '/vendor/autoload.php';2. PhpSpreadsheet: criação e estilização de arquivos Excel
A biblioteca suporta os formatos XLSX, XLS, ODS, CSV e outros. Permite gerenciar estilos, mesclar células, inserir imagens e fórmulas.
Exemplo: criando um relatório simples
use PhpOffice\\PhpSpreadsheet\\Spreadsheet;use PhpOffice\\PhpSpreadsheet\\Writer\\Xlsx;use PhpOffice\\PhpSpreadsheet\\Style\\Alignment;
$spreadsheet = new Spreadsheet();$sheet = $spreadsheet->getActiveSheet();
// Cabeçalhos$sheet->setCellValue('A1', 'Produto');$sheet->setCellValue('B1', 'Quantidade');$sheet->setCellValue('C1', 'Preço, R$');
// Dados$data = [ ['Notebook', 5, 45000], ['Monitor', 10, 15000], ['Teclado', 20, 2500],];$row = 2;foreach ($data as $item) { $sheet->setCellValue("A{$row}", $item[0]); $sheet->setCellValue("B{$row}", $item[1]); $sheet->setCellValue("C{$row}", $item[2]); $row++;}
// Fórmula de total$sheet->setCellValue("A{$row}", 'Total');$sheet->setCellValue("C{$row}", "=SUM(C2:C" . ($row-1) . ")");
// Estilização dos cabeçalhos$styleHeader = [ 'font' => ['bold' => true, 'size' => 12], 'alignment' => ['horizontal' => Alignment::HORIZONTAL_CENTER], 'fill' => ['fillType' => \\PhpOffice\\PhpSpreadsheet\\Style\\Fill::FILL_SOLID, 'color' => ['rgb' => 'E0E0E0']]];$sheet->getStyle('A1:C1')->applyFromArray($styleHeader);
// Largura automática das colunasforeach (range('A', 'C') as $col) { $sheet->getColumnDimension($col)->setAutoSize(true);}
// Salvamento$writer = new Xlsx($spreadsheet);$writer->save('report.xlsx');echo "Arquivo report.xlsx criado!";Lendo um arquivo XLSX existente
use PhpOffice\\PhpSpreadsheet\\IOFactory;
$inputFileName = 'example.xlsx';$spreadsheet = IOFactory::load($inputFileName);$sheet = $spreadsheet->getActiveSheet();
$highestRow = $sheet->getHighestRow();$highestColumn = $sheet->getHighestColumn();
for ($row = 1; $row <= $highestRow; $row++) { $rowData = $sheet->rangeToArray("A{$row}:{$highestColumn}{$row}", NULL, TRUE, FALSE); echo implode(', ', $rowData[0]) . "<br>";}3. OpenSpout: trabalho rápido com tabelas grandes
OpenSpout é otimizado para escrita e leitura em fluxo. Ele não suporta estilos e fórmulas, mas é ideal para exportar milhares de linhas de dados (por exemplo, exportação de banco de dados).
Exemplo: escrevendo 10.000 linhas em CSV/XLSX
use OpenSpout\\Writer\\XLSX\\Writer;use OpenSpout\\Common\\Entity\\Row;
$writer = new Writer();$writer->openToFile('big_export.xlsx');
// Cabeçalhos$headerRow = Row::fromValues(['ID', 'Nome', 'Email']);$writer->addRow($headerRow);
for ($i = 1; $i <= 10000; $i++) { $row = Row::fromValues([$i, "User{$i}", "user{$i}@example.com"]); $writer->addRow($row);}
$writer->close();echo "Exportação concluída!";Lendo um arquivo XLSX grande linha por linha
use OpenSpout\\Read Também na biblioteca
Configuração de aplicações Node.js: melhores bibliotecas e práticas
Monitoramento de aplicações PHP com as bibliotecas php-ast e xhprof
Validação de dados em Swift (iOS/macOS): ferramentas e prática
Autorização e Autenticação em JavaScript (Node.js): Guia Completo