Ir para conteúdo
Thyago Brasil

Exportar PHP para XLS

Recommended Posts

Pessoal, bom dia!

Estou fazendo a exportação de uma consulta para XLS.

O meu problema está sendo que ao exportar para o XLS, tenho um campo valor que está importando de forma incorreta. Pelo que percebi, valores maiores de 1000 ou que contenham os centavos (por ex: 855,14) Estão exportando corretos. Porém numeros cheios (por ex: 800) vai no fim como 800 mesmo.

Abaixo, o código de como estou fazendo:

HTML montado:


$html = '';

$html .= '<table '.$style_table.'>';

$html .= '   <tr>';

$html .= '       <td><b><center>Admissão</center></b></td>';

$html .= '       <td><b><center>Nome</center></b></td>';

$html .= '       <td><b><center>Cargo</center></b></td>';

$html .= '       <td width="30%"><b><center>Salário</center></b></td>';

$html .= '   </tr>';



$html .= '   <tr>';

$html .= '       <td>01/12/2013</td>';

$html .= '       <td>JOAO DA SILVA</td>';

$html .= '       <td>SUPERVISOR(A) ATC</td>';

$html .= '       <td>1.165,00</td>';

$html .= '   </tr>';

$html .= '   <tr>';

$html .= '       <td>01/10/2010</td>';

$html .= '       <td>MARIA DO BAIRRO</td>';

$html .= '       <td>FERRAMENTEIRO</td>';

$html .= '       <td>852,00</td>';

$html .= '   </tr>';

$html .= '   <tr>';

$html .= '       <td>01/05/2015</td>';

$html .= '       <td>KARINA DE SOUZA</td>';

$html .= '       <td>AUX. ADMINISTRATIVO</td>';

$html .= '       <td>855,49</td>';

$html .= '   </tr>';

$html .= '</table>';



return $html;

Função para geração do XLS:


function geraXls($arquivo, $html){

    // Configurações header para forçar o download

    header ("Expires: Mon, 26 Jul 1997 05:00:00 GMT");

    header ("Last-Modified: " . gmdate("D,d M YH:i:s") . " GMT");

    header ("Cache-Control: no-cache, must-revalidate");

    header ("Pragma: no-cache");

    header ("Content-type: application/x-msexcel");

    header ("Content-Disposition: attachment; filename=\"$arquivo\"" );

    header ("Content-Description: PHP Generated Data" );

    // Envia o conteúdo do arquivo

}

No exemplo:
- 1.165,00 vai exportar para o excel certo;
- 852,00 não exporta correto, ou seja, exporta 852;
- 855,49, exporta correto também.

Alguém teria alguma ideia do que possa ser?
Para formatar já fiz essas duas formas mas não deram certo:


$salario = sprintf('%.2f', '852,00'); // ESTE TRANSFORMA O CAMPO EM STRING E NA HORA DE FAZER ALGUMA FORMULA NO EXCEL NÃO FUNCIONA

$salario = number_format('852,00', 2, ',', '.'); // ESTE FAZ O QUE FALEI NO EXEMPLO ACIMA.

Desde já, agradeço a ajuda de todos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

HTML montado:
$html = '';

$html .= '<table '.$style_table.'>';
$html .= ' <tr>';
$html .= ' <td><b><center>Admissão</center></b></td>';
$html .= ' <td><b><center>Nome</center></b></td>';
$html .= ' <td><b><center>Cargo</center></b></td>';
$html .= ' <td width="30%"><b><center>Salário</center></b></td>';
$html .= ' </tr>';
$html .= ' <tr>';
$html .= ' <td>01/12/2013</td>';
$html .= ' <td>JOAO DA SILVA</td>';
$html .= ' <td>SUPERVISOR(A) ATC</td>';
$html .= ' <td>1.165,00</td>';
$html .= ' </tr>';
$html .= ' <tr>';
$html .= ' <td>01/10/2010</td>';
$html .= ' <td>MARIA DO BAIRRO</td>';
$html .= ' <td>FERRAMENTEIRO</td>';
$html .= ' <td>852,00</td>';
$html .= ' </tr>';
$html .= ' <tr>';
$html .= ' <td>01/05/2015</td>';
$html .= ' <td>KARINA DE SOUZA</td>';
$html .= ' <td>AUX. ADMINISTRATIVO</td>';
$html .= ' <td>855,49</td>';
$html .= ' </tr>';
$html .= '</table>';

// Configurações header para forçar o download
header ("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header ("Last-Modified: " . gmdate("D,d M YH:i:s") . " GMT");
header ("Cache-Control: no-cache, must-revalidate");
header ("Pragma: no-cache");
header ("Content-type: application/x-msexcel");
header ("Content-Disposition: attachment; filename=\"{$arquivo}\"" );
header ("Content-Description: PHP Generated Data" );

echo $html;
exit;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Apenas um detalhe. No codigo abaixo, se eu tiro o ponto, quando os valores são maiores que 1000, também não traz as decimais.

Ex:

$salario = number_format('1852,00', 2, ',', '.');

No codigo acima, o export traz correto no excel, ou seja, 1.852,00

$salario = number_format('1852,00', 2, ',', '');

Nesse exemplo, eu tirei o ponto, o que fica errado, ou seja, 1852

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ja tentou usar o valor como float e ponto no lugar de virgula.

Uma coisa é ir o valor como string, a outra é ir como float no excel

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ja tentou usar o valor como float e ponto no lugar de virgula.

Uma coisa é ir o valor como string, a outra é ir como float no excel

Boa tarde Williams. Tentei como sugeriu, porém, não deu certo.

Fiz isso: $salario = number_format('852,00', 2, '.', '');

Mas ele entende como string e não calcula.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Converta para decimal, number_format e só para formatar, não tem nada haver com cálculo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

vamos por parte, pega o valor que voce quer inserir neste momento e de um var_dump

echo "<pre>";

var_dump($nome_da_variavel);

echo "</pre>";

e coloca aqui o resultado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.