PHPExcel_IOFactory::createWriter导致错误行为

PHPExcel_IOFactory::createWriter导致错误行为,php,phpexcel,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'

创建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文件不同,使用任何浏览器的ouptut类似:

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āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā257

我尝试了各种浏览器,但得到了相同的结果。另一方面,如果我使用以下几行保存文件,效果很好:

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

知道为什么我的浏览器无法使用它吗?如果您将输出流式传输到,请提前感谢您的帮助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://output.... 我很惊讶您也没有收到“headers ready sent”错误

您必须清理输出缓冲区并使用
ob\u end\u 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;

谢谢您的回答。我的代码中没有回音,我上一条消息中显示的错误消息的标题与输出无关,很抱歉给您带来不便。以下是输出,不知为什么,我无法从浏览器生成Excel 2007文件,知道原因吗?警告:无法修改标题信息-标题al已发送(输出开始于/homez.40/foodbank/www/phpexcel/Tests/testyves3.php:9)in/homez.40/foodbank/www/phpexcel/Tests/testyves3.php,第77行PK-;EA½Haärä[Content_Types]。xml­“MN 1950…÷339;”nYòvAa•(0ö216;––ýd=“”根据您刚才添加的消息:“输出从/homez.40/foodbank/www/phpexcel/Tests/testyves3.php:9开始”表示正在向php://output 在/homez.40/foodbank/www/phpexcel/Tests/目录中testyves3.php脚本的第9行。根据您在原始问题中显示的输出,“某物”将成为消息07:31:12创建新的PHPExcel对象”。记住?>和感谢标记之间的任何内容,下面是生成警告消息的行:header('Content-Type:application/vnd.openxmlformats of cedocument.spreadsheetml.sheet');header('Content-Disposition:attachment;filename=“Report.xlsx”');header(“Pragma:no cache”);我在这些行中发现了许多类似的示例,有什么不对吗?感谢Yvest,输出在第9行,而不是第77行。您在第77行(包含header()语句的行)得到了错误,但错误是由第9行的输出触发的(错误消息中barckets中的引用)…第8行和第10行之间的PHP代码中有什么内容?