PHP
Gerando planilha Excel com PHP e MySql

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.
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:
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.=)
Gigasystems Login:
Informe seu e-mail abaixo para continuar!
XVeja Também:
Artigos Relacionados a categoria: PHP
Cotações para compra e venda de Moedas estrangeiras com PHP
27 July de 2016
Gerenciador de dependências Composer
14 January de 2016
Erro ao acessar um arquivo externo com o comando file_get_content
04 November de 2015
Baixando anexo do email no servidor com IMAP e PHP
27 August de 2015
Olá, deixe seu comentário para Gerando planilha Excel com PHP e MySql
Jose Luiz
Nome Sobrenome
Italo Hanzer
Muito show!
Simples, objetivo, eficaz!
Perfeito!
Jordan Martins
[15-Sep-2020 23:01:43 UTC] PHP Warning: Cannot modify header information - headers already sent by (output started at .../public_html/print.php:1) in /home/netsexyrede/public_html/print.php on line 29
[15-Sep-2020 23:01:43 UTC] PHP Warning: Cannot modify header information - headers already sent by (output started at .../public_html/print.php:1) in /home/netsexyrede/public_html/print.php on line 30
[15-Sep-2020 23:01:43 UTC] PHP Warning: Cannot modify header information - headers already sent by (output started at .../public_html/print.php:1) in /home/netsexyrede/public_html/print.php on line 31
[15-Sep-2020 23:01:43 UTC] PHP Warning: Cannot modify header information - headers already sent by (output started at .../public_html/print.php:1) in /home/netsexyrede/public_html/print.php on line 33
Vinicius Silva
Antonio Duarte
Adriano Silva
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.
Feranda Silva
Pedro Havenard
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!
Erick Castilho
Erick Castilho
Erick Castilho
Leandro Marcelino
E adicionei a linha no meu projeto, mas não está funcionando.
Gustavo
Onde eu encontro esse sistema?
Leonardo Martins