解决 PhpSpreadsheet 输出 Excel 时自动在 xls 后面加入 html 后缀的办法

昨晚写从数据库导出 Excel 功能的时候发现了 PHPExcel,挺好用,只是被废弃了。

现在最新的叫 PhpSpreadsheet,参考文档 搞定完创建 Excel 之后,却发现无论是按照网上的办法,还是官方示例代码,在尝试从浏览器中直接输出 Excel.xls 文件的时候。

都遇到了只能从 Chrome 输出,在 Safari 输出时会自动在后面加上 .html 后缀的问题。

后来发现问题很简单,既不出在 header 上,也不出在伪静态上。

而是只需要在 save 方法后加上一个「exit;」就解决问题了。

1
2
3
4
5
6
7
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename="赴宴信息.xls"');
header('Cache-Control: max-age=0');

$writer = \PhpOffice\PhpSpreadsheet\IOFactory::createWriter($spreadsheet, 'Xls');
$writer->save('php://output');
exit;

遂踩坑留念。

Sunbelife wechat