PhpSpreadsheet - Download file instead of saving it PhpSpreadsheet - Download file instead of saving it php php

PhpSpreadsheet - Download file instead of saving it


use PhpOffice\PhpSpreadsheet\Spreadsheet;use PhpOffice\PhpSpreadsheet\Writer\Xlsx;class DownloadExcel{    public static function createExcel(array $data, array $headers = [],                                       $fileName = 'data.xlsx')    {        $spreadsheet = new Spreadsheet();        $sheet = $spreadsheet->getActiveSheet();        for ($i = 0, $l = sizeof($headers); $i < $l; $i++) {            $sheet->setCellValueByColumnAndRow($i + 1, 1, $headers[$i]);        }        for ($i = 0, $l = sizeof($data); $i < $l; $i++) { // row $i            $j = 0;            foreach ($data[$i] as $k => $v) { // column $j                $sheet->setCellValueByColumnAndRow($j + 1, ($i + 1 + 1), $v);                $j++;            }        }        $writer = new Xlsx($spreadsheet);        header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');        header('Content-Disposition: attachment; filename="'. urlencode($fileName).'"');        $writer->save('php://output');    }}

This is what I use to create a spreadsheet with PhpSpreadsheet and output directly to php://output for download.


My answer :PHP:

$writer = new Xlsx($spreadsheet);ob_start();$writer->save('php://output');$ret['data'] = base64_encode(ob_get_contents());ob_end_clean();

JS:

var linkSource = 'data:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;base64,'+ response.data ;var downloadLink = document.createElement("a");var fileName = 'clients.' + format;downloadLink.href = linkSource;downloadLink.download = fileName;downloadLink.click();


I had the same problem and found a solution here : https://github.com/PHPOffice/PhpSpreadsheet/issues/217

I ended my method with $writer->save('php://output'); then exit()