Im trying to convert a html table to excel using PHPExcel. The thing is, sometimes i get an error ('Cannot open file cause its format/extension is corrupted' and other times it doesnt and it runs perfectly. Usually i get the error on the first 3 times i try to create the file and at the fourth time it goes well.
Does anyone have an idea on why this happens? I thought about the amount of information i put on the table but to be honest i dont know.
<?php
session_start();
require_once '../classes/PHPExcel-1.8/Classes/PHPExcel.php';
ini_set('max_execution_time', 300);
$servidorodbc=file('../public/odbc.txt',FILE_IGNORE_NEW_LINES);
$dsn=$servidorodbc['0'];
$user=$servidorodbc['1'];
$pwd=$servidorodbc['2'];
if($pwd="''"){
$pwd="";
}
$ano = addslashes( $_SESSION['anopr']);
$mes = addslashes( $_SESSION['mespr']);
$db = odbc_connect($dsn, $user, $pwd);
$query = odbc_exec($db, "Select
Cliente,Nome_Cli,CCusto,Descricao,Codigo,Nome,Tipo,Provisoes,Pagamentos,Acrescimos,Liquidacoes,Saldo,Ac_Provisoes,Ac_Pagamento,Ac_Acrescimos,Ac_Liquidacoes,Ac_Saldo,Amor_Abertura,Amor_Utilizacao,Amor_Fecho,Amor_Saldo
from GP_Provisoes_Acum where Ano=".$ano." and Mes=".$mes."
union all
Select Cliente=0,Nome_Cli='',CCusto=0,Descricao='SOMATÓRIOS TOTAIS',Codigo=0,Nome='',Tipo='TOTAL',
SUM(Provisoes) as Provisoes, SUM(Pagamentos) as Pagamentos,SUM(Acrescimos) as Acrescimos,
SUM(Liquidacoes) as Liquidacoes,SUM(Saldo) as Saldo, SUM(Ac_Provisoes) as Ac_Provisoes,
SUM(Ac_Pagamento) as Ac_Pagamento, SUM(Ac_Acrescimos) as Ac_Acrescimos, SUM(Ac_Liquidacoes) as Ac_Liquidacoes,
SUM(Ac_Saldo) as Ac_Saldo, Amor_Abertura=0,Amor_Utilizacao=0,Amor_Fecho=0,Amor_Saldo=0
from GP_Provisoes_Acum where Ano=".$ano." and Mes=".$mes
);
$objPHPExcel = new PHPExcel();
$rowCount = 1;
$objPHPExcel->getActiveSheet()->SetCellValue('A'.$rowCount,'Cliente');
$objPHPExcel->getActiveSheet()->SetCellValue('B'.$rowCount,'Nome do Cliente');
$objPHPExcel->getActiveSheet()->SetCellValue('C'.$rowCount,'Centro de Custo');
$objPHPExcel->getActiveSheet()->SetCellValue('D'.$rowCount,'Descricao');
$objPHPExcel->getActiveSheet()->SetCellValue('E'.$rowCount,'Codigo');
$objPHPExcel->getActiveSheet()->SetCellValue('F'.$rowCount,'Nome');
$objPHPExcel->getActiveSheet()->SetCellValue('G'.$rowCount,'Tipo');
$objPHPExcel->getActiveSheet()->SetCellValue('H'.$rowCount,'Provisoes');
$objPHPExcel->getActiveSheet()->SetCellValue('I'.$rowCount,'Pagamentos');
$objPHPExcel->getActiveSheet()->SetCellValue('J'.$rowCount,'Acrescimo');
$objPHPExcel->getActiveSheet()->SetCellValue('K'.$rowCount,'Liquidacoes');
$objPHPExcel->getActiveSheet()->SetCellValue('L'.$rowCount,'Saldo');
$objPHPExcel->getActiveSheet()->SetCellValue('M'.$rowCount,'Ac_Provisoes');
$objPHPExcel->getActiveSheet()->SetCellValue('N'.$rowCount,'Ac_Pagamento');
$objPHPExcel->getActiveSheet()->SetCellValue('O'.$rowCount,'Ac_Acrescimo');
$objPHPExcel->getActiveSheet()->SetCellValue('P'.$rowCount,'Ac_Liquidacoes');
$objPHPExcel->getActiveSheet()->SetCellValue('Q'.$rowCount,'Ac_Saldo');
$objPHPExcel->getActiveSheet()->SetCellValue('R'.$rowCount,'Amor_Abertura');
$objPHPExcel->getActiveSheet()->SetCellValue('S'.$rowCount,'Amor_Utilização');
$objPHPExcel->getActiveSheet()->SetCellValue('T'.$rowCount,'Amor_Fecho');
$objPHPExcel->getActiveSheet()->SetCellValue('U'.$rowCount,'Amor_Saldo');
while ($row = odbc_fetch_array($query)){
$rowCount++;
$objPHPExcel->getActiveSheet()->SetCellValue('A'.$rowCount,$row['Cliente']);
$objPHPExcel->getActiveSheet()->SetCellValue('B'.$rowCount,$row['Nome_Cli']);
$objPHPExcel->getActiveSheet()->SetCellValue('C'.$rowCount,$row['CCusto']);
$objPHPExcel->getActiveSheet()->SetCellValue('D'.$rowCount,$row['Descricao']);
$objPHPExcel->getActiveSheet()->SetCellValue('E'.$rowCount,$row['Codigo']);
$objPHPExcel->getActiveSheet()->SetCellValue('F'.$rowCount,$row['Nome']);
$objPHPExcel->getActiveSheet()->SetCellValue('G'.$rowCount,$row['Tipo']);
$objPHPExcel->getActiveSheet()->SetCellValue('H'.$rowCount,$row['Provisoes']);
$objPHPExcel->getActiveSheet()->SetCellValue('I'.$rowCount,$row['Pagamentos']);
$objPHPExcel->getActiveSheet()->SetCellValue('J'.$rowCount,$row['Acrescimos']);
$objPHPExcel->getActiveSheet()->SetCellValue('K'.$rowCount,$row['Liquidacoes']);
$objPHPExcel->getActiveSheet()->SetCellValue('L'.$rowCount,$row['Saldo']);
$objPHPExcel->getActiveSheet()->SetCellValue('M'.$rowCount,$row['Ac_Provisoes']);
$objPHPExcel->getActiveSheet()->SetCellValue('N'.$rowCount,$row['Ac_Pagamento']);
$objPHPExcel->getActiveSheet()->SetCellValue('O'.$rowCount,$row['Ac_Acrescimos']);
$objPHPExcel->getActiveSheet()->SetCellValue('P'.$rowCount,$row['Ac_Liquidacoes']);
$objPHPExcel->getActiveSheet()->SetCellValue('Q'.$rowCount,$row['Ac_Saldo']);
$objPHPExcel->getActiveSheet()->SetCellValue('R'.$rowCount,$row['Amor_Abertura']);
$objPHPExcel->getActiveSheet()->SetCellValue('S'.$rowCount,$row['Amor_Utilizacao']);
$objPHPExcel->getActiveSheet()->SetCellValue('T'.$rowCount,$row['Amor_Fecho']);
$objPHPExcel->getActiveSheet()->SetCellValue('U'.$rowCount,$row['Amor_Saldo']);
}
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
');
header('Content-Disposition: attachment;filename="Tabela_de_Previsoes.xlsx"');
header('Cache-Control: max-age=0');
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
ob_end_clean();
$objWriter->save('php://output');
?>
If your database contains millions of information then it can surely slowdown the process.
Another reason can be about of cells you are creating in a loop.
A bit more info about the code will give better overview of the situation.
Corrupted excel file can be in that case, when there was an error during file generation.
Try to open an excel file with native text reader, such as notepad and see, is there any error/warning/notice.
Make sure to enable errors reporting/displaying.