PHPExcel - Иногда, когда я скачиваю файл Excel, он поврежден, а иногда - работает. - PullRequest
0 голосов
/ 25 марта 2019

Я пытаюсь преобразовать HTML-таблицу, чтобы преуспеть, используя PHPExcel.Дело в том, что иногда я получаю сообщение об ошибке («Невозможно открыть файл, поскольку его формат / расширение повреждено», а иногда нет и работает отлично. Обычно я получаю сообщение об ошибке в первые 3 раза, когда пытаюсь создать файл, и прив четвертый раз все идет хорошо.

Кто-нибудь знает, почему это происходит? Я думал о количестве информации, которую я положил на стол, но, честно говоря, я не знаю.

<?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');





?>

Ответы [ 2 ]

0 голосов
/ 25 марта 2019

Поврежденный файл Excel может быть в том случае, если при генерации файла произошла ошибка.

Попробуйте открыть файл Excel с помощью собственного текстового ридера, такого как блокнот, и посмотрите, есть ли какая-либо ошибка / предупреждение/notice.

Убедитесь, что вы включили отображение / отображение ошибок.

0 голосов
/ 25 марта 2019

Если ваша база данных содержит миллионы информации, то это, безусловно, может замедлить процесс.

Другая причина может быть связана с ячейками, которые вы создаете в цикле.

Немного больше информации о коде даст лучший обзор ситуации.

...