Uma dúvida comum que vejo em vários lugares, fóruns e stackoverflow, é como manipular planilhas com o PHP. Tínhamos um projeto bastante conhecido chamado PHPExcel, porém, ele agora está obsoleto (embora muita gente ainda utilize esse projeto). Então, o pessoal do PHPExcel encoraja devs PHP a utilizarem o projeto sucessor, o PHPSpreadsheet.
De acordo com a documentação oficial, podemos ler e escrever em diversos tipos de arquivos relacionados com planilhas. Podemos verificar as extensões e as restrições desses arquivos na imagem abaixo:
Então, vamos ao que interessa, como criar uma planilha utilizando o PHPSpreadsheet? Primeiramente, devemos dar aquele composer require de sempre.
composer require phpoffice/phpspreadsheet
O projeto sugere a instalação de algumas outras bibliotecas para manipular PDFs, mas, não é obrigatório que você as instale.
Feito isso, vamos a um exemplo de criação da planilha abaixo:
Nome | Nota 1 | Nota 2 | Média |
pokemaobr | 5 | 3.5 | 4.25 |
bob | 7 | 8 | 7.5 |
boina | 9 | 9 | 9 |
No caso abaixo, salvaremos o arquivo como spreadsheet.php.
<?php require 'vendor/autoload.php'; //autoload do projeto use PhpOffice\PhpSpreadsheet\Spreadsheet; //classe responsável pela manipulação da planilha use PhpOffice\PhpSpreadsheet\Writer\Xlsx; //classe que salvará a planilha em .xlsx $spreadsheet = new Spreadsheet(); //instanciando uma nova planilha $sheet = $spreadsheet->getActiveSheet(); //retornando a aba ativa $sheet->setCellValue('A1', 'Nome'); //Definindo a célula A1 $sheet->setCellValue('B1', 'Nota 1'); //Definindo a célula B1 $sheet->setCellValue('C1', 'Nota 2'); $sheet->setCellValue('D1', 'Media'); $sheet->setCellValue('A2', 'pokemaobr'); $sheet->setCellValue('B2', 5); $sheet->setCellValue('C2', 3.5); $sheet->setCellValue('D2', '=((B2+C2)/2)'); //Definindo a fórmula para o cálculo da média $sheet->setCellValue('A3', 'bob'); $sheet->setCellValue('B3', 7); $sheet->setCellValue('C3', 8); $sheet->setCellValue('D3', '=((B3+C3)/2)'); $sheet->setCellValue('A4', 'boina'); $sheet->setCellValue('B4', 9); $sheet->setCellValue('C4', 9); $sheet->setCellValue('D4', '=((B4+C4)/2)'); $writer = new Xlsx($spreadsheet); //Instanciando uma nova planilha $writer->save('spreadsheet1.xlsx'); //salvando a planilha na extensão definida
Depois de feito isso, basta dar um:
php spreadsheet.php
E ver a mágica acontecendo. (Lembre-se que se você estiver no Windows, não deixe sua planilha aberta no Excel, senão o sistema não terá permissão de alterar o arquivo).
Depois, basta abrir o arquivo e verá o resultado.
Sendo assim, é só seguir a lógica para poder criar outros tipos de planilha utilizando outras fórmulas. Por exemplo, a função de soma, basta utilizarmos “sum”.
Nome | Nota 1 | Soma das notas | |
pokemaobr | 5 | 21 | |
bob | 7 | ||
boina | 9 |
Salvando como spreadsheetSum.php.
<?php require 'vendor/autoload.php'; //autoload do projeto use PhpOffice\PhpSpreadsheet\Spreadsheet; //classe responsável pela manipulação da planilha use PhpOffice\PhpSpreadsheet\Writer\Xlsx; //classe que salvará a planilha em .xlsx $spreadsheet = new Spreadsheet(); //instanciando uma nova planilha $sheet = $spreadsheet->getActiveSheet(); //retornando a aba ativa $sheet->setCellValue('A1', 'Nome'); //Definindo a célula A1 $sheet->setCellValue('B1', 'Nota 1'); //Definindo a célula B1 $sheet->setCellValue('D1', 'Media'); $sheet->setCellValue('A2', 'pokemaobr'); $sheet->setCellValue('B2', 5); $sheet->setCellValue('D2', '=(sum(B2:B4))'); //Definindo a fórmula para o cálculo da média $sheet->setCellValue('A3', 'bob'); $sheet->setCellValue('B3', 7); $sheet->setCellValue('A4', 'boina'); $sheet->setCellValue('B4', 9); $writer = new Xlsx($spreadsheet); //Instanciando uma nova planilha $writer->save('spreadsheet2.xlsx'); //salvando a planilha na extensão definida
E a planilha fica dessa maneira:
Nesse caso, o Excel traduziu a função escrita em inglês para o português sem problemas.
No próximo artigo veremos como manipular planilhas já existentes independente da extensão. Um grande abraço, até a próxima.