PHP Excel is exporting data skipping line

Asked

Viewed 145 times

1

I would like help to understand why when generating the report the data are not matching with the information tags , the same keeps skipping lines

Example of how the file looks

inserir a descrição da imagem aqui

 <?php
$dadosXls = "";
$dadosXls .= "<meta charset='UTF-8'>";
$dadosXls .= "<table border='1'>";
$dadosXls .= "<tr>";
$dadosXls .= "<th>Cep</th>";
$dadosXls .= "<th>Numero</th>";
$dadosXls .= "<th>Nome</th>";
$dadosXls .= "<th>Endereço</th>";
$dadosXls .= "<th>Numero</th>";
$dadosXls .= "<th>Bairro</th>";
$dadosXls .= "<th>Cidade</th>";
$dadosXls .= "<th>UF</th>";       
$dadosXls .= "<th>Previsão</th>";
$dadosXls .= "<th>Complemento</th>";      
$dadosXls .= "</tr>";



require_once "../public/setting/conexao.php";

if($_POST){
    session_start();
    $previsao = $_POST["data_entrega"];
}


    try{

        global $previsao;  
        $Conexao    = Conexao::getConnection();
        $query      = $Conexao->query("
        
        select PEDV_CEP, PEDV_ID,
    
        CLI_RAZAO
        
        , PEDV_ENDERECO
        , CLI_NUMERO AS NUMERO
        
        , BAIRRO.GEN_DESC AS BAIRRO
        
        , CIDADE.GEN_DESC AS CIDADE
        
        , UF.GEN_DESC AS UF
        
        , PEDV_DTA_PREV
        
        , PEDV_FLG_ENTREGA
        
        , CLI_COMPLEMENTO_ENT 
        
        from CLIENTE
        
             LEFT JOIN PEDIDO_VENDA ON
        
                                   CLIENTE.CLI_ID = PEDIDO_VENDA.PEDV_CLI_ID 
        
             LEFT JOIN GENER UF ON
        
                                   UF.GEN_TID = 100
        
                   AND UF.GEN_ID  = PEDV_GEN_ID_UF
        
             LEFT JOIN GENER CIDADE ON
        
                                   CIDADE.GEN_TID = 101
        
                   AND CIDADE.GEN_ID  = PEDV_GEN_ID_CIDADE
        
             LEFT JOIN GENER BAIRRO ON
        
                                   BAIRRO.GEN_TID = 102
        
                   AND BAIRRO.GEN_ID  = PEDV_GEN_ID_BAIRRO
        
        WHERE PEDV_FLG_ENTREGA = 'S' AND PEDV_DTA_PREV = '{$previsao}';
        
        
        
        ");
        
        $produtos   = $query->fetchAll();    
    
    }catch(Exception $e){
        echo $e->getMessage();
        exit;
    }

    
    foreach($produtos as $produto) {
        $dadosXls .= "<tr>";
        $dadosXls .= '<td>'.$produto['PEDV_CEP'].'<td>';
        $dadosXls .= '<td>'.$produto['PEDV_ID'].'<td>';
        $dadosXls .= "<td>".$produto['CLI_RAZAO']."<td>";
        $dadosXls .= "<td>".$produto['PEDV_ENDERECO']."<td>";
        $dadosXls .= "<td>".$produto['NUMERO']."<td>";
        $dadosXls .= "<td>".$produto['BAIRRO']."<td>";
        $dadosXls .= "<td>".$produto['CIDADE']."<td>";
        $dadosXls .= "<td>".$produto['UF']."<td>";
        $dadosXls .= "<td>".$produto['PEDV_DTA_PREV']."<td>";
        $dadosXls .= "<td>".$produto['CLI_COMPLEMENTO_ENT']."<td>";
        $dadosXls .= "</tr>";
    };

    $dadosXls .= "</table>";

    $arquivo = "PlanilhaEntrega.xls"; 

     // Configurações header para forçar o download  
    header('Content-Type: application/vnd.ms-excel');
    header('Content-Disposition: attachment;filename="'.$arquivo.'"');
    header('Cache-Control: max-age=0');
    // Se for o IE9, isso talvez seja necessário
    header('Cache-Control: max-age=1');
    
    // Envia o conteúdo do arquivo  
    echo $dadosXls;  
    exit;

?>

  • Which library are you using?

  • Good afternoon William, I don’t know if the answer to your question would be in these lines of code: ('Content-Type: application/vnd.ms-excel');

  • so you’re not using any library. Explain to me better what’s going on, the header isn’t matching the value of the cells? Post your entire page so we can help you better.

  • That’s right William, the values are not matching with the header as above picture

1 answer

1


Bruno, you are not closing the column tag correctly with the bar! You are doing <td> instead of </td>.

Change the lines of:

$dadosXls .= '<td>'.$produto['PEDV_CEP'].'<td>';

for:

$dadosXls .= '<td>'.$produto['PEDV_CEP'].'</td>';

When finding a <td> new before closing with the </td> correctly, the interpreter thinks it’s another column, closes the </td> and opens the new one. Then it happens to add the new column.

Browser other questions tagged

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