使用PHPExcel强制下载Excel文件

4
我正在使用以下标头来输出通过PHPExcel生成的Excel表格:
```php

我正在使用以下标题来输出通过PHPExcel生成的Excel表格:

```
// Redirect output to a client’s web browser (Excel2007)
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename="01simple.xlsx"');
header('Cache-Control: max-age=0');

$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
$objWriter->save('php://output'); 

相反,无意义的文本被发送到浏览器:

PK������&DG�D�X��������[Content_Types].xml��MN�0���"�%nY ��vAa  �(0����ؖg�w{&i�@�nbE�{��y��d۸l
    m�����X�(���)���F��;@1_�����c)j�x/%��E��y�

请问有人能帮我提供正确的头部信息来强制下载Excel文件吗?非常感谢。

编辑1:

header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename="01simple.xlsx"');
header('Cache-Control: max-age=0');

$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
$objWriter->save('php://output'); 

仍然无法正常工作。

可能是重复问题:php,文件下载 - Guilherme Nascimento
3个回答

7

错误的内容类型和文件类型不会有所帮助:

application/vnd.ms-excel 用于使用 Excel5 编写器创建的 .xls 文件

application/vnd.openxmlformats-officedocument.spreadsheetml.sheet 用于使用 Excel2007 编写器创建的 .xlsx 文件

但是,如果你在浏览器中看到了那个“乱码”(实际上是 xlsx 文件本身),那么很可能在发送这些标头之前,你也将其他内容回显或打印到了浏览器中,即使只是一个空格、制表符或换行符。


“读取”(在浏览器中打开)还是“下载”(应用程序/八进制流)? - Guilherme Nascimento
谢谢你的回答,@Mark。但我仍然得到了一些无意义的响应。 - Supreet Totagi
使用“查看源代码”并查找任何字符,例如在gibberish开头的空格或换行符。 - Mark Baker
我遇到了完全相同的问题...问题是我在PHP文件开头放了一个空行,我猜测浏览器试图显示这一行,因此导致Excel文件无法正常工作。删除该行后问题得以解决。 - Ashbay

5
清理输出
ob_end_clean();
$objWriter->save('php://output');
exit();

0

这个问题夺走了我的一生!像这样解决它:

ob_get_clean();
$objWriter->save('php://output');
ob_end_flush();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接