-1
I always use a script to export data to xls with PHP. It served me a lot, but in this case I just need to generate the xls and attach in the email.
I spent much of the morning trying to make the script just generate the spreadsheet, without forcing the download, but, if I take the "Content-Disposition: Attachment", gives error on the page.
Follows the script:
<?php
include("php/phpmailer/PHPMailerAutoload.php");
// Trazendo as informações da tabela:
$header = "";
$dados = "";
$header .= utf8_decode('Serviço'. "\t");
$header .= utf8_decode('Projeto nº'. "\t");
$header .= utf8_decode('Cliente'. "\t");
$header .= utf8_decode('Processo'. "\t");
$header .= utf8_decode('Vencimento'. "\t");
// Select dos processos para fazer o lembrete
$sql_2 = mysqli_query($config, "SELECT ps.data_vencimento_limite, ps.id_processo, IFNULL(NULL, ps.num_processo), ps.descricao, c.nome_razao FROM tb_processos_servicos ps LEFT JOIN tb_processos AS p ON (ps.id_processo = p.id_processo) LEFT JOIN tb_agenda AS c ON (p.cliente = c.id) WHERE ps.data_vencimento_limite <> '0000-00-00' AND ps.data_vencimento_limite <= '$data_atual_db' ORDER BY ps.data_vencimento_limite DESC") or die(mysqli_error($config));
if(@mysqli_num_rows($sql_2) <= 0){
echo "";
}else{
while($r_sql_2 = mysqli_fetch_array($sql_2)){
$vencimento_limite = date("d/m/Y", strtotime($r_sql_2[0]));
$id_processo = $r_sql_2[1];
$num_processo = $r_sql_2[2];
$descricao_sel = utf8_decode($r_sql_2[3]);
$cliente_sel = utf8_decode($r_sql_2[4]);
// Insere a linha
$line = '';
$value = '"' ."$descricao_sel". '"' . "\t";
$value .= '"' ."$id_processo". '"' . "\t";
$value .= '"' ."$cliente_sel". '"' . "\t";
if(empty($num_processo)){
$value .= '""' . "\t";
}else{
$value .= '"' ."'$num_processo". '"' . "\t";
}
$value .= '"' ."$vencimento_limite". '"' . "\t";
$line .= strtr($value,"","") ;
// O trim retira os espaços encontrados no começo e no final de cada linha encontrada.
$dados .= trim($line)."\n";
// Substituindo todas as quebras de linha ao final de cada registro, que por padrão seria \r por uma valor em branco, para que a formatao fique legível
$dados = str_replace("\r","",$dados);
// Caso não encontre nenhum registro, mostra esta mensagem.
if ($dados== "") {
$dados = "\n Nenhum registro encontrado!\n";
}
}
// O trim retira os espaços encontrados no começo e no final de cada linha encontrada.
$dados .= trim($line)."\n";
// Substituindo todas as quebras de linha ao final de cada registro, que por padrão seria \r por uma valor em branco, para que a formatao fique legível
$dados = str_replace("\r","",$dados);
// Cabeçalhos e instruções para geração e download do arquivo:
header("Content-type: application/x-msexcel");
// Este cabeçalho abaixo, indica que o arquivo deve ser gerado para download.
// Se eu tirar ele salva o arquivo na pasta, mas dá erro na página
header("Content-Disposition: attachment; filename=$nome_arquivo");
// No cache, ou seja, não guarda cache, pois é gerado dinamicamente
header("Pragma: no-cache");
// Não expira
header("Expires: 0");
// E aqui geramos o arquivo com os dados mencionados acima!
print "$header\n$dados";
file_put_contents("anexos/".$nome_arquivo,$dados);
//Aqui será enviado o e-mail.
}
mysqli_close($config);
?>
I don’t know is it possible to just generate the xls with this script, but it is so practical that I will make one last attempt.
In this case it saves in the "attachments" folder, but opens the browser box to download.
Where is
header("Content-Disposition: attachment; filename=$nome_arquivo");
change toheader("Content-Disposition: inline");
– Augusto Vasques
With this change you printed everything on the screen, instead of generating the xls.
– Rogério Pancini