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()