Atualizado em 08 de Janeiro de 2014
Exportando Dados do MySQL para Excel com PHP
Olá pessoal,Exportar dados de um programa para outro e muito comum ainda mais quando estamos trabalhando com dados que necessitam de análise, um dos programas mais usados para análise de dados é o Excel, por este motivo neste post vou mostrar como exportar os dados do MySQL para o Excel com o PHP.
Em nosso exemplo não vou explicar como fazer conexão com o banco de dados, caso você seja iniciante em PHP visite o nosso Curso de PHP Básico para aprender passo a passo esta fantástica linguagem de programação.
Então vamos ao script:
<?php
// Inclui a conexão
include_once('conexao.php');
// Nome do Arquivo do Excel que será gerado
$arquivo = 'dados_emails.xls';
// Criamos uma tabela HTML com o formato da planilha para excel
$tabela = '<table border="1">';
$tabela .= '<tr>';
$tabela .= '<td colspan="2">Tabela de E-mails</tr>';
$tabela .= '</tr>';
$tabela .= '<tr>';
$tabela .= '<td><b>Nome</b></td>';
$tabela .= '<td><b>Email</b></td>';
$tabela .= '</tr>';
// Puxando dados do Banco de dados
$resultado = mysql_query('SELECT * FROM emails');
while($dados = mysql_fetch_array($resultado))
{
$tabela .= '<tr>';
$tabela .= '<td>'.$dados['nome'].'</td>';
$tabela .= '<td>'.$dados['email'].'</td>';
$tabela .= '</tr>';
}
$tabela .= '</table>';
// Força o Download do Arquivo Gerado
header ('Cache-Control: no-cache, must-revalidate');
header ('Pragma: no-cache');
header('Content-Type: application/x-msexcel');
header ("Content-Disposition: attachment; filename=\"{$arquivo}\"");
echo $tabela;
?>
O próprio código já esta bem comentado, mas em caso de dúvida comentem.
Veja também como Importando Dados do Excel para MySQL com PHP.
"Esta dica te ajudou de alguma forma?" Então ajude outras pessoas compartilhando este conteúdo com seus amigos! =)
Até a próxima.
Comentários

Mauro
05 de Fevereiro de 2016 - 21:43

Mauricio Programador
Olá Mauro,
Na verdade se você quer salvar no seu banco de dados uma fração deve usar o float e não Varchar.
Como você esta com varchar vai ter que converter este dado antes de enviar para o Excel.
Para converter use:
$valor_float = floatval ($variavel);
Abraço.
19 de Fevereiro de 2016 - 14:41

Raphael Higashi Silva
05 de Fevereiro de 2016 - 15:23

Mauricio Programador
Olá Raphael,
o PHP não tem acesso a todos os recursos que se usássemos o Excel diretamente terÃamos a disposição.
Eu realmente nunca precisei fazer este tipo de operação, mas após a sua pergunta pesquisei e não encontrei nada.
Se encontrar algo compartilhe conosco.
Abraço.
05 de Fevereiro de 2016 - 15:37

Mudjau
28 de Janeiro de 2016 - 09:26

Alexandre Possebon
23 de Outubro de 2015 - 19:46

Mauricio Programador
Olá Alexandre,
Na verdade eu nunca fiz este teste com o br, mas acredito que não va da certo pois não e este comando que o Excel usa para quebrar linhas dentro das células.
Mas se achar uma solução e quiser compartilhar com nós fica a vontade.
Abraço.
30 de Outubro de 2015 - 14:21

Luan
11 de Julho de 2015 - 23:57

Mauricio Programador
Olá Luan,
Obrigado pelo reconhecimento.
Bom primeiro você terá que criar este arquivo fÃsico no seu servidor, para isso pode usar o post que indico abaixo:
http://www.mauricioprogramador.com.br/posts/como-criar-arquivos-com-php
Depois disso pasta usar o comando do phpmailer para anexar com o caminho do arquivo:
$mail->AddAttachment("CAMINHO E NOME DO ARQUIVO");
Prontinho.
Abraço.
13 de Julho de 2015 - 11:33

Herbert Resende Freitas
25 de Maio de 2015 - 10:54

Mauricio Programador
Olá Herbert,
Se aceitar uma sugestão, crie apenas o link então, e quando o usuário clicar no click ele vai para pagina que faz o cvs e baixa o arquivo, assim você vai otimizar processamento em seu servidor.
E se precisar mostrar os dados para o usuário antes dele clicar no link, apenas exiba a tabela com a consulta.
Abraço.
01 de Junho de 2015 - 09:12

Danilo Tessitore
20 de Maio de 2015 - 14:29

Mauricio Programador
Olá Danilo,
Deu erro? Qual o erro?
Abraço.
21 de Maio de 2015 - 09:52

Cléber Balota
16 de Abril de 2015 - 00:37

Mauricio Programador
Olá Cléber,
Você deve fazer a parte de exportar em uma pagina separado do seu HTML.
Abraço.
16 de Abril de 2015 - 09:11

almir
26 de Março de 2015 - 17:22

Mauricio Programador
Olá Almir,
o PHP não tem acesso a todos os recursos que se usássemos o Excel diretamente terÃamos a disposição.
Eu realmente nunca precisei fazer este tipo de operação, mas após a sua pergunta pesquisei e não encontrei nada.
Se encontrar algo compartilhe conosco.
Abraço.
27 de Março de 2015 - 11:01

Almir
Mauricio tem como colocar imagem nesta planilha?
31 de Março de 2015 - 10:05

Mauricio Programador
Almir,
Como lhe falei acima, o PHP não tem acesso a todos os recursos.
Se encontrar algo me avise, post ai para nos.
Abraço.
31 de Março de 2015 - 10:06

CARLOS HENRIQUE MENDES
19 de Março de 2015 - 10:52

Jeferson
18 de Março de 2015 - 21:13

Mauricio Programador
Olá Jeferson,
Duas coisas que você pode testar para ver se o erro continua.
Primeira: Quando usamos este comando de header para fazer download, ele não pode conter nenhuma saÃda de texto antes do header, verifique se existe alguma.
Segundo: Se localmente este funcionando o bom seria testar em outro host que não seja este seu atual e confirmar realmente se não e problema dentro do host de hospedagem.
Testa ai, qualquer coisa da um retorno.
Abraço.
19 de Março de 2015 - 09:22

CARLOS HENRIQUE MENDES
18 de Março de 2015 - 10:22

Jeferson Machia
11 de Março de 2015 - 12:15

Edimilson Corrêa Duarte
08 de Março de 2015 - 04:10

Rodolpho Netto
09 de Janeiro de 2015 - 09:20

Mauricio Programador
Olá Rodolpho,
Basta você ajustar a codificação de caracteres que ele irá escrever certo.
Teste um desses dois comandos: utf8_encode, utf8_decode
Vai resolver o problema.
Abraço.
12 de Janeiro de 2015 - 10:21

Danilo
16 de Novembro de 2014 - 20:07

Mauricio Programador
Olá Danilo,
De um echo na variável $tabela e verifique se o resultado vindo do banco de dados esta sendo gerado de forma correta.
Abraço.
17 de Novembro de 2014 - 08:52

Danilo
Ola Mauricio obrigado pela atenção,
Os dados vem corretamento do banco, o problema ocorre no restante da tabela, no espaço da tabela onde não tem dados, também não tem células aparece como se fosse um arquivo word.
21 de Novembro de 2014 - 08:50

Mauricio Programador
Danilo,
Posta o seu código e a sua tabela ai para eu ver.
Abraço.
21 de Novembro de 2014 - 08:51

danilo
olá Mauricio mandei um email com o código e tabela.
25 de Novembro de 2014 - 08:56

Regis
23 de Outubro de 2014 - 10:39

Patrick Gomes
19 de Outubro de 2014 - 18:06

Mauricio Programador
Olá Patrick,
Tem como criar sim gráficos em PHP.
Vou criar um post mostrando como se faz.
Abraço.
20 de Outubro de 2014 - 10:42

Bruno
13 de Outubro de 2014 - 10:24

Marcus Barbosa
Muito obrigado me ajudou bastante
09 de Agosto de 2014 - 09:21

Altair Antonio
18 de Maio de 2014 - 11:46

Mauricio Programador
Olá Altair,
tente usar assim:
utf8_encode($dados['nome']);
Deve resolver o problema.
Abraço.
19 de Maio de 2014 - 10:11

FabrÃcio Schunemann
19 de Abril de 2014 - 14:00

MARCELO BRANCO
02 de Abril de 2014 - 18:02