4

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

而不是获取 Excel2007 文件,任何类型的浏览器的输出都类似于:

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±"û½oüg÷œ%”NKë”ü‰Ï¦£by‰]*y„Hª† F¦Üp4SùØH¤ß¸Aªµ\¸ï„òÁa†ŸŽXñJD£-dÄÙHì .....

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

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

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

4

2 回答 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 行为,过去在这里已经回答了数千次的问题: echoes go to php://output.... 我很惊讶您没有收到“标头已发送”错误以及

于 2012-10-05T06:27:04.943 回答
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;
于 2018-08-18T15:47:53.287 回答