File Corrupted in Phpexcel

Asked

Viewed 338 times

0

While generating Phpexcel database file, the file . xls is coming corrupted, follows pictureinserir a descrição da imagem aqui

What would be the mistake, I tried to find but I see nothing wrong. Follow codes.

The following PHP code receives data from another page of a completed form. Where the user selects the database table and which columns do you want to generate the information.

// Incluimos a classe PHPExcel
include '../componentes/plugins/PHPExcel/Classes/PHPExcel.php';
$tabela = $_POST['txttabela'];# recebe o nome da tabela
$p_colunas = $_POST['chkcolunas'];  #recebe as colunas das respctivas tabelas
$qtdColunas = count($p_colunas); #conta quantas colunas o usuario selecionou
// Instanciamos a classe
$objPHPExcel = new PHPExcel();
if($tabela==""){
  echo "Selecione a tabela.";
}else{
$sel_sintaxe = "SELECT "; # adiciona o SELECT, deixando o parateses aberto para concatenar no proximo $sel_sintaxe
$row = 1;
$col = 0;
for($i=0; $isetActiveSheetIndex(0)
    ->setCellValueByColumnAndRow($col, $row, $p_colunas[$i]);
    $col++;
}
#Usando o substr, retiramos os ultimos dois caracteres, que no caso seriam o espaço e uma virgula, que estariamo na ultima coluna.
$sel_sintaxe = substr($sel_sintaxe, 0, -2);
#Concatena qual tabela sera pesquisada os dados
$sel_sintaxe .= " FROM ".$tabela."";
#recebe as condições que o usuario difiniu
 $RdNull = $_POST['rdNull'];
 $RdDescAsc = $_POST['rdDescAsc'];
if(isset($_POST['txtlimite'])){
    $txtLimite = $_POST['txtlimite'];
}
if($RdNull || $RdDescAsc || isset($txtLimite)){
    if($RdNull=="nao"){
        $sel_sintaxe .=" WHERE ";
        for($i=0; $i
#Após executamos a pesquisa
$sql_sel_tabela_preparado = $conexaobd->prepare($sel_sintaxe);
$sql_sel_tabela_preparado->execute();
// Podemos definir as propriedades do documento
$objPHPExcel->getProperties()->setCreator("Rech Lanches")
->setLastModifiedBy("Nome da Empresa")
->setTitle("Nome da Empresa - Avaliações")
->setSubject("Nome da Empresa - Avaliações - Exportação")
->setDescription("Dados Exportados do Banco de Dados");
// Alterando o tamanho da fonte
$objPHPExcel->getDefaultStyle()->getFont()->setName('Arial');
$objPHPExcel->getDefaultStyle()->getFont()->setSize(11); 
// Define a planilha ativa para o PHPExcel operar
$objPHPExcel->setActiveSheetIndex(0);
// Define o título da planilha 
$objPHPExcel->getActiveSheet()->setTitle($tabela);
// Exemplo de preenchimento de dados de maneira dinâmica, a partir de um resultado do banco de dados por exemplo.
$linha = 3;
while($sql_sel_tabela_dados = $sql_sel_tabela_preparado->fetch()){
$col = 0;
for($i=0; $igetActiveSheet()->getStyle($colString."1")->applyFromArray(
            array('fill' => array(
                'type' => PHPExcel_Style_Fill::FILL_SOLID,
                'color' => array('rgb' => 'CBE28C')
            ),
            )
        );
        //Fazendo que as primeiras cédulas sejam em negrito
        $objPHPExcel->getActiveSheet()->getStyle($colString.'1')->getFont()->setBold(true);
        // Alterando o tamanho da fonte
        $objPHPExcel->getActiveSheet()->getStyle($colString.'1')->getFont()->setSize(14);
        // Qubra de linha ativada para todas as cédulas
        $objPHPExcel->getActiveSheet()->getStyle($colString)
        ->getAlignment()->setWrapText(true);
        // Alinha as cédulas ao meio
        $objPHPExcel->getActiveSheet()->getStyle($colString)
        ->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);
        // Alinha as cédulas ao centro
        $objPHPExcel->getActiveSheet()->getStyle($colString)
        ->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
        // Alinha as cédulas.1 ao centro
        $objPHPExcel->getActiveSheet()->getStyle($colString.'1')
        ->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
        // Define a largura das colunas de modo automático
        $objPHPExcel->getActiveSheet()->getColumnDimension($colString)->setAutoSize(true);
        //Cria as linhas em suas repectivas letras números e dados
        $objPHPExcel->setActiveSheetIndex(0)
        ->setCellValue($colString. $linha, $sql_sel_tabela_dados[$colunaInver]);
        $col++;
    }
 $linha++;
}
$nometabela = "nomedaempresa_".$tabela.".xls";
#redefinimos configurações para gerar o arquivo, definir um nome, e forçar seu download.
header('Content-Type: application/vnd.openxmlformats- officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename="'.$nometabela);
header('Cache-Control: max-age=0');
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
ob_end_clean(); 
$objWriter->save('php://output');
exit;
}
  • That one for is very wrong for($i=0; $isetActiveSheetIndex(0)
 ->setCellValueByColumnAndRow($col, $row, $p_colunas[$i]);
 $col++;
}, your code generates some error?

1 answer

-1

I had the same problem, change the ob_end_clean(); below the variable $table name and update the file extension to . xlsx Excel2007, and solved my case.

$table name = "name_". $table.".xlsx";
ob_end_clean();
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: Attachment;filename="'. $table name);
header('Cache-Control: max-age=0');
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
$objWriter->save('php://output');
Exit; }

Browser other questions tagged

You are not signed in. Login or sign up in order to post.