PHPExcel_IOFactory :: createWriter导致错误的行为

时间:2012-10-05 05:22:05

标签: php phpexcel

创建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');

使用任何类型的浏览器的ouptut都不是获取Excel2007文件,而是:

  

07:31:12创建新的PHPExcel对象07:31:12设置属性07:31:12   添加一些数据07:31:12重命名表07:31:12写入Excel2007格式   PKæ; e控制 - ![[Content_Types] .xml“MNÃ0...÷= ...å-Jܲ@%í,*Q`ìIcÕ± - {úw{& I E   J7±“û½oüg÷œ%” NKE”ü‰Ï|£由‰] * y“的Hª†F|Üp4SùØH¤ß¸Aªμ\ I“OAA†ŸŽXñJD£-dÄÙHì   .....

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

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

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

2 个答案:

答案 0 :(得分: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://输出....我很惊讶你也没有得到“标题已经发送“错误

答案 1 :(得分: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;