PHPExcel_IOFactory :: createWriter导致错误的行为

问题描述 投票:4回答:2

创建PHPExcel程序后,最后一步包括保存工作表,为此,我想应用这些规则以便在Excel 2007中生成文件:

header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename="workbook1.xlsx"');
header('Cache-Control: max-age=0');
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
$objWriter->save('php://output');

使用任何类型的浏览器的输出不是获取Excel 2007文件,而是类似于:

07:31:12创建新的PHPExcel对象07:31:12设置属性07:31:12添加一些数据07:31:12重命名表07:31:12写入Excel2007格式PKæ;È< - ![[Content_Types] .xml“MNÃ0...÷= ...å-Jܲ@%í,*Q``IcÕ± - {úw{&I E j7±”û½og÷œ%“NKë”ü‰Ï|£by by‰] * y“Hª† F |||||||||||||||

我试过各种浏览器,但我得到了相同的结果。另一方面,如果我使用下面这些行保存文件,它可以正常工作:

$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); 
$objWriter->save('/usr/local/myWorkbooks/workbook1.xlsx');  

知道为什么它不能通过我的浏览器工作?在此先感谢您的帮助

php phpexcel
2个回答
0
投票

如果您将输出流式传输到php:// output,则不得回显该输出流的任何其他内容。你清楚地回应了这些台词:

07:31:12 Create new PHPExcel object 
07:31:12 Set properties 
07:31:12 Add some data 
07:31:12 Rename sheet 
07:31:12 Write to Excel2007 format 

在Excel文件本身之前输出

删除那些回声线

这是标准的PHP行为,这个问题在过去已经被回答了数千次:回到php://输出....我很惊讶你也没有得到“已经发送的标题”错误同样


0
投票

在保存之前,您必须使用ob_end_clean()清理输出缓冲区并关闭缓冲。改为:

    $objWriter =  PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');

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

    ob_end_clean();
    $objWriter->save('php://output');
    exit;
© www.soinside.com 2019 - 2024. All rights reserved.