PHP

Em por

No tutorial de hoje vamos aprender a criar uma planilha Excel (.xls) com PHP e MySql, e fazer o download dessa planilha no momento de sua criação.

Gerando planilha Excel com PHP e MySql

Criando planilha Excel com PHP

Criar relatórios em sistemas, nem sempre é algo tão trivial como parece, em alguns momentos podemos nos deparar com a necessidade de exportar os dados em um formato diferenciado. Por experiência própria, é de Lei que algum cliente irá pedir isto para você, pode esperar!

 Normalmente, para geração de relatórios, utilizamos alguma biblioteca de PDF como mPDF inclusive já fizemos um artigo falando sobre ele, ou  fPDF para padronizar a impressão e formatação no geral.

Mas podemos também utilizar relatórios em Excel, permitindo ao usuário final interagir com os dados, da mesma maneira que faria com uma planilha que  ele mesmo tivesse criado. Isso é possível gerando planilhas com PHP e MySql.

Agora vamos ao que interessa...

Primeiramente criamos nossa conexão com o nosso Banco de Dados MySql, você pode escolher desenvolver sua aplicação com PDO ou a antiga API mysql do PHP, fica a seu critério, porém no exemplo aqui mencionado, usarei o PDO para o desenvolvimento.

Conexao.class.php

 <?php class Conexao { private $data = array(); protected $pdo = null; public function __set($name, $value){ $this->data[$name] = $value; } public function __get($name){ if (array_key_exists($name, $this->data)) { return $this->data[$name]; } $trace = debug_backtrace(); trigger_error( 'Undefined property via __get(): ' . $name . ' in ' . $trace[0]['file'] . ' on line ' . $trace[0]['line'], E_USER_NOTICE); return null; } public function getPdo() { return $this->pdo; } function __construct($pdo = null) { $this->pdo = $pdo; if ($this->pdo == null) $this->conectar(); } public function conectar() { try { $this->pdo = new PDO("mysql:host=localhost;dbname=test", "root", "", array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8")); } catch (PDOException $e) { print "Error!: " . $e->getMessage() . "<br/>"; die(); } } public function desconectar() { $this->pdo = null; } public function select($sql){ $stmt = $this->pdo->prepare($sql); $stmt->execute(); return $stmt->fetchAll(PDO::FETCH_ASSOC); } } ?>

Crie um arquivo com a extensão (.php) e de o nome que você desejar, no meu caso eu escolhi imprimir.php.

Muito bem, próximo passo agora é montarmos nossa tabela HTML na qual será ela a conter as informações do Banco de Dados e consequentemente no Excel.

 <?php //declaramos uma variavel para monstarmos a tabela $dadosXls = ""; $dadosXls .= " <table border='1' >"; $dadosXls .= " <tr>"; $dadosXls .= " <th>Id</th>"; $dadosXls .= " <th>Nome</th>"; $dadosXls .= " <th>Email</th>"; $dadosXls .= " </tr>"; //incluimos nossa conexão include_once('Conexao.class.php'); //instanciamos $pdo = new Conexao(); //mandamos nossa query para nosso método dentro de conexao dando um return $stmt->fetchAll(PDO::FETCH_ASSOC); $result = $pdo->select("SELECT id,nome,email FROM cadastro"); //varremos o array com o foreach para pegar os dados foreach($result as $res){ $dadosXls .= " <tr>"; $dadosXls .= " <td>".$res['id']."</td>"; $dadosXls .= " <td>".$res['nome']."</td>"; $dadosXls .= " <td>".$res['email']."</td>"; $dadosXls .= " </tr>"; } $dadosXls .= " </table>"; // Definimos o nome do arquivo que será exportado $arquivo = "MinhaPlanilha.xls"; // Configurações header para forçar o download header('Content-Type: application/vnd.ms-excel'); header('Content-Disposition: attachment;filename="'.$arquivo.'"'); header('Cache-Control: max-age=0'); // Se for o IE9, isso talvez seja necessário header('Cache-Control: max-age=1'); // Envia o conteúdo do arquivo echo $dadosXls; exit; ?>

Simples não é, você vai concatenar toda estrutura da tabela em uma variável, lembrando que você pode colocar quantas colunas e linhas quiserem e depois dar um echo na variável criada para ela adicionar o conteúdo dela, dentro do arquivo com a extensão (.xls).

Nosso exemplo acima deve ficar parecido com:

Exemplo Planilha Excel com Php

Existem outros métodos de se criar uma planilha Excel a partir do PHP, como por exemplo, usando classes, a mais utilizada é a classe PHPExcel, com muito mais recursos de se trabalhar do que da maneira abordada, ela conta com diversas funcionalidades bem variadas. Permite desde a criação de arquivos com uma única planilha simples até arquivos com mais de uma planilha, com fórmulas pré-definidas e formatação de campos e colunas. Ou seja, dá conta do recado.

A classe tem cerca de 110MB, embora seja grande não é de difícil à utilização, mas falaremos dessa classe especificamente em outra oportunidade.

Dúvidas, criticas ou sugestões comentem abaixo que termos o prazer em tentar lhe ajudar.laugh

Veja Também:

Artigos Relacionados a categoria: PHP

Olá, deixe seu comentário para Gerando planilha Excel com PHP e MySql

Já temos 5 comentário(s). DEIXE O SEU :)
Gustavo

Gustavo

Ola,
Onde eu encontro esse sistema?
★☆☆☆☆ DIA 08.12.15 16h12 RESPONDER
N/A
Enviando Comentário Fechar :/
Leonardo Martins

Leonardo Martins

Ola Gustavo, não entendi sua pergunta, seja mais específico por favor.
★☆☆☆☆ DIA 09.12.15 16h12 RESPONDER
N/A
Enviando Comentário Fechar :/
Pedro Havenard

Pedro Havenard

Excelente!
Porém a planilha gerada vem com erros em alguns caracteres ( á, ã...) saberia me informar como posso adaptar o código para corrigir isso? Abraços!
★★★★★ DIA 14.06.16 13h56 RESPONDER
N/A
Enviando Comentário Fechar :/
Feranda Silva

Feranda Silva

Muito legal, da pra criar um sisteminha completo?
★★★★★ DIA 23.07.16 18h47 RESPONDER
N/A
Enviando Comentário Fechar :/
Adriano Silva

Adriano Silva

Olá, tudo bom?
Estou com um cliente que os relatórios dele foram preparados para serem gerados em PDF com o Fpdf , mas agora ele quer que gere também em Excel, existe uma forma de fazer com que esses relatórios sejam gerados para excel e pdf ou que seja gerado em PDF e depois convertido para excel, uma forma que de menos trabalho, não estou pronto para refazer todos os relatórios mudando de pdf para excel, mas sim uma forma que de de colocar as duas opções ou que de pdf gere para Excel.
★★★★★ DIA 20.07.17 14h50 RESPONDER
N/A
Enviando Comentário Fechar :/
Enviando Comentário Fechar :/

...AINDA NÃO VIU NOSSO PORTFÓLIO?

Se ainda não viu nosso Portfólio e quer conhecer um pouco mais... aproveite e veja agora mesmo e tenha um site de qualidade para o seu negócio!

[contato]
Ver o Portfólio Agora