Back-End

26 jan, 2018

Criando planilhas em PHP com o PhpSpreadsheet

Publicidade

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.