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

Apó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                    

Recommendations