Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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.
Bom dia Laerte. Sim, está sendo chamada. Coloquei aspas simples como você sugeriu porém continuou na mesma.
header ("Content-Disposition: attachment; filename=\"{$arquivo}\"" );
muda para o acima
Mudei mas não deu certo.
Tenta fazer sem auxilio de função veja um exemplo no site abaixo:http://blog.thiagobelem.net/criando-e-exportando-planilhas-do-excel-com-php
Mesma coisa...
posta o código na última alteração
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;cade a variavel $arquivo sendo setada
desculpe, faltou colocar. Mas está correto no meu arquivo
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
Bom dia. Alguma ideia pessoal?
$salario = number_format('1852,00', 2, ',', '.');
Muda para:
$salario = number_format('1852', 2, ',', '.');
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
>
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.
Converta para decimal, number_format e só para formatar, não tem nada haver com cálculo.
Converta para decimal, number_format e só para formatar, não tem nada haver com cálculo.
Deu na mesma
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 resultadoMe retornou isso Williams:
float(852)
É o seguinte, não sei se da pra trabalhar com estilos com este código acima, mas se você quer que tenha as casas decimais, use PHPExcelhttps://github.com/PHPOffice/PHPExcel
há varios exemplos na net
um deles seria assim
$objPHPExcel->getActiveSheet()
->getStyle('E4:E13')
->getNumberFormat()
->setFormatCode(
FORMAT_CURRENCY_PLN_1
);
http://stackoverflow.com/questions/19111678/phpexcel-get-cell-currency-format-other-than-and-eur
É o seguinte, não sei se da pra trabalhar com estilos com este código acima, mas se você quer que tenha as casas decimais, use PHPExcelhttps://github.com/PHPOffice/PHPExcel
há varios exemplos na net
um deles seria assim
$objPHPExcel->getActiveSheet()
->getStyle('E4:E13')
->getNumberFormat()
->setFormatCode(
FORMAT_CURRENCY_PLN_1
);
http://stackoverflow.com/questions/19111678/phpexcel-get-cell-currency-format-other-than-and-eur
>
Em 10/11/2016 at 16:37, Thyago Brasil disse:
Me retornou isso Williams:
float(852)
Aplica o number_format que vai funcionar
$numero = 852;
$format = number_format($numero, 2, ',', '.');
echo $format //852,00
header ("Content-Disposition: attachment; filename=\"$arquivo\"" )
Vê se essa variavel $arquivo tá sendo chamada, coloque entre aspas simples