Jump to content
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.

Share this post


Link to post
Share on other 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;

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.