UP
Problema na exportação de CSV
Fechado
Caros, estou exportando um relatório pra csv, porém estou tendo problemas o arquivo fica todo desorganizado, os dados pulam pra próxima linha antes de chegar na ultima coluna.
Segue o código abaixo e o arquivo csv em anexo
Alguém já possou por isso ?
function onExportCSV()
{
$this->onSearch();
try
{
TTransaction::open('easycontact');
$repository = new TRepository('Contact');
$criteria = new TCriteria;
$content = '';
$contacts = $repository->load($criteria);
if ($contacts)
{
$header .= 'ID;'.
'Paciente;'.
'Telefone1;'.
'Telefone2;'.
'Telefone3;'.
'Telefone4;'.
'Tipo;'.
'Status;'.
'Tentativas;'.
'Disposition;'.
'Agendamento;'.
'Carga \n';
foreach ($contacts as $contact)
{
$content .= $contact->id.';'.
$contact->nome_paciente.';'.
$contact->telefone1.';'.
$contact->telefone2.';'.
$contact->telefone3.';'.
$contact->telefone4.';'.
$contact->tipo.';'.
$contact->status.';'.
$contact->retry.';'.
$contact->disposition.';'.
$contact->data_agendamento.';'.
$contact->data_carga."\n";
if ($i < 1) $content = $header;
$i++;
}
file_put_contents('app/output/contacts.csv', $content);
TPage::openFile('app/output/contacts.csv');
}
TTransaction::close();
}
catch (Exception $e)
{
new TMessage('error', 'Error ' . $e->getMessage());
TTransaction::rollback();
}
}
Segue o código abaixo e o arquivo csv em anexo
Alguém já possou por isso ?
function onExportCSV()
{
$this->onSearch();
try
{
TTransaction::open('easycontact');
$repository = new TRepository('Contact');
$criteria = new TCriteria;
$content = '';
$contacts = $repository->load($criteria);
if ($contacts)
{
$header .= 'ID;'.
'Paciente;'.
'Telefone1;'.
'Telefone2;'.
'Telefone3;'.
'Telefone4;'.
'Tipo;'.
'Status;'.
'Tentativas;'.
'Disposition;'.
'Agendamento;'.
'Carga \n';
foreach ($contacts as $contact)
{
$content .= $contact->id.';'.
$contact->nome_paciente.';'.
$contact->telefone1.';'.
$contact->telefone2.';'.
$contact->telefone3.';'.
$contact->telefone4.';'.
$contact->tipo.';'.
$contact->status.';'.
$contact->retry.';'.
$contact->disposition.';'.
$contact->data_agendamento.';'.
$contact->data_carga."\n";
if ($i < 1) $content = $header;
$i++;
}
file_put_contents('app/output/contacts.csv', $content);
TPage::openFile('app/output/contacts.csv');
}
TTransaction::close();
}
catch (Exception $e)
{
new TMessage('error', 'Error ' . $e->getMessage());
TTransaction::rollback();
}
}
O CSV nada mais é que arquivo separado por ; verifique se no meio de sua string não tem nenhum ; uma forma é usar o strreplace para excluir os ; das strings.
Sds
Felipe Cortez
Valeu Felipe, eu não tinha pensado nisso, vou verificar.
Abração
Tem uma quebra de linha, no final do header em que o n está entre aspas simples, veja 'n'. Use duplas.
Att,
O símbolo de contrabarra não pegou no meu post, mas imagine que ele está ali :-) \n
Certo, Pablo obrigado pela atenção.
Vou fazer a alteração. A questão de ser uma tabela gigante não tem nada a ver não né ? Meu hardware é muito bom, tem processador 8 núcleos com 16 gigas de ram.
O que me deixa entrigado é que quando limito a 10.000 registros funciona, com o código da desta forma.
Abração.
Tente editar o arquivo direto no sistema de arquivos para ver quantas linhas estão sendo geradas.
O PHP tem limite de memória no php.ini (memory_limit). O file_put_contents() pode
estar sofrendo com isso por ter de gravar uma string gigante de uma vez só.
Tente usar fopen(), fwrite() para escrever no arquivo aos poucos:
php.net/fwrite
Abraço,