Trabalho com Excel em PHP: bibliotecas PhpSpreadsheet e PhpOffice
No desenvolvimento web moderno, surge frequentemente a necessidade de exportar dados para o formato Excel, importar relatórios ou processar planilhas no lado do servidor. O PHP oferece várias bibliotecas poderosas para trabalhar com arquivos .xlsx, .xls e .ods. Neste artigo, abordaremos detalhadamente o PhpSpreadsheet — uma biblioteca moderna e ativamente desenvolvida que substituiu a obsoleta PHPExcel.
O que é PhpSpreadsheet?
PhpSpreadsheet é uma biblioteca para ler, escrever e editar planilhas eletrônicas em vários formatos: Excel, OpenDocument, CSV, HTML e PDF. Ela é escrita em PHP puro, não requer a instalação de extensões adicionais (além das padrão zip e xml) e suporta todos os principais recursos do Excel: estilos, fórmulas, gráficos, formatação condicional, várias planilhas e muito mais.
Instalação
A instalação é feita via Composer:
composer require phpoffice/phpspreadsheetApós a instalação, uma pasta vendor com carregamento automático é criada no projeto. Para começar, basta incluir o autoloader:
require 'vendor/autoload.php';
use PhpOffice\\PhpSpreadsheet\\Spreadsheet;use PhpOffice\\PhpSpreadsheet\\Writer\\Xlsx;Criando um arquivo Excel simples
Vamos ver um exemplo básico: criar um arquivo com cabeçalhos e algumas linhas de dados.
// Cria um novo objeto Spreadsheet$spreadsheet = new Spreadsheet();$sheet = $spreadsheet->getActiveSheet();
// Define os cabeçalhos$sheet->setCellValue('A1', 'Nome') ->setCellValue('B1', 'Email') ->setCellValue('C1', 'Data de registro');
// Preenche com dados$sheet->setCellValue('A2', 'João Silva') ->setCellValue('B2', 'joao@exemplo.com') ->setCellValue('C2', '2024-01-15');
$sheet->setCellValue('A3', 'Maria Santos') ->setCellValue('B3', 'maria@exemplo.com') ->setCellValue('C3', '2024-02-20');
// Salva o arquivo$writer = new Xlsx($spreadsheet);$writer->save('usuarios.xlsx');
echo "Arquivo usuarios.xlsx criado com sucesso!";Após executar o script, um arquivo usuarios.xlsx será criado na raiz do projeto, que pode ser aberto no Excel ou Google Sheets.
Lendo um arquivo Excel existente
O PhpSpreadsheet permite ler facilmente dados de qualquer formato. Exemplo de carregamento e exibição do conteúdo:
$inputFileName = 'usuarios.xlsx';$spreadsheet = \\PhpOffice\\PhpSpreadsheet\\IOFactory::load($inputFileName);$sheet = $spreadsheet->getActiveSheet();
// Lê todas as linhas$data = $sheet->toArray();
foreach ($data as $row) { echo implode(' | ', $row) . "";}O método toArray() retorna um array bidimensional, onde o primeiro elemento é uma linha com índices 0,1,2… Você pode acessar células pelo endereço: $sheet->getCell('A2')->getValue().
Trabalhando com estilos e formatação
Um dos pontos fortes do PhpSpreadsheet é o gerenciamento flexível da aparência da planilha.
$styleArray = [ 'font' => [ 'bold' => true, 'size' => 12, 'color' => ['argb' => 'FF2E4057'], ], 'fill' => [ 'fillType' => \\PhpOffice\\PhpSpreadsheet\\Style\\Fill::FILL_SOLID, 'startColor' => ['argb' => 'FFD9E2EC'], ], 'borders' => [ 'allBorders' => [ 'borderStyle' => \\PhpOffice\\PhpSpreadsheet\\Style\\Border::BORDER_THIN, ], ],];
// Aplica o estilo ao intervalo$sheet->getStyle('A1:C1')->applyFromArray($styleArray);
// Largura automática das colunasforeach (range('A','C') as $col) { $sheet->getColumnDimension($col)->setAutoSize(true);}Exportando dados do banco para Excel
Frequentemente é necessário exportar resultados de consultas SQL. Exemplo com PDO: