Gerar arquivo excel com PHP usando a classe phpSpreadSheet

23/10/2018

0

PHP

Meus caros boa noite! Trabalho recentemente em um projeto que exige a geração de arquivos excel (xlsx), consegui fazer funcionar perfeitamente, porem o arquivo que a classe gera e salvo na pasta no servidor, o que é inviável. Quando adiciono os cabeçalhos para fazer o Download do arquivo, este e gerado com erro (corrompido).

Gostaria de saber se alguém pode me ajudar com isso?
meu codigo:
<?php
require_once './app/config/config.inc.php';
require_once './app/composer/vendor/autoload.php';

use PhpOffice\\\\PhpSpreadsheet\\\\Spreadsheet;
use PhpOffice\\\\PhpSpreadsheet\\\\Writer\\\\Xlsx;

$sql        = new Read();

$sql->FullRead("SELECT EQ.patrimonio,
                        C.descricao equipamento,
                        F.nome_fabricante fabricante,
                        EQ.serie,
                        M.modelo,
                        L.local 
                    FROM tb_sys004 EQ
                        JOIN tb_sys008 L ON L.id = EQ.id_local
                        JOIN tb_sys018 F ON F.id_fabricante = EQ.fabricante
                        JOIN tb_sys022 M ON M.id_modelo = EQ.modelo
                        JOIN tb_sys003 C ON C.id = EQ.id_categoria AND EQ.id_local = 1 order by EQ.patrimonio");

$spreadsheet = new Spreadsheet(); //instanciando uma nova planilha

    $sheet = $spreadsheet->getActiveSheet(); //retornando a aba ativa
    $sheet->setCellValue('A1',"Patrimonio");
    $sheet->setCellValue('B1',"Equipamento");
    $sheet->setCellValue('C1',"Fabricante");
    $sheet->setCellValue('D1',"Serie");
    $sheet->setCellValue('E1',"Modelo");
    $sheet->setCellValue('F1',"local");
$i=1;
foreach ($sql->getResult() as $res):
    $sheet->setCellValue('A'.$i, $res['patrimonio']); 
    $sheet->setCellValue('B'.$i, $res['equipamento']); 
    $sheet->setCellValue('C'.$i, $res['fabricante']); 
    $sheet->setCellValue('D'.$i, $res['serie']); 
    $sheet->setCellValue('E'.$i, $res['modelo']); 
    $sheet->setCellValue('F'.$i, $res['local']); 

    $i++;
endforeach;

header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename="myfile.xlsx"');
header('Cache-Control: max-age=0');
$writer = \\\\PhpOffice\\\\PhpSpreadsheet\\\\IOFactory::createWriter($sheet, 'Xlsx');
$writer->save('php://output');
Leandro Costa

Leandro Costa

Responder

Post mais votado

26/10/2018

Fala Leandro, tranquilo?

Cara, tenta antes da sua última linha adicionar o código "ob_end_clean()", ficando assim:

ob_end_clean()
$writer->save(''php://output'');


Vlw

Pablo Carvalho

Pablo Carvalho
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar