PHPExcel生成的excel文件无效。 (文件格式或扩展名无效)
PHPExcel的示例代码在我的本地PC上成功除外,该文件被下载到本地并在Excel 2007中成功打开。 但是在我的服务器上使用相同的代码会将无效文件设置为excel,当我打开并修复时,它会成功打开。
我不想使用“打开并修复”选项,只能使用“打开”选项。
无法找出问题所在?请帮忙。
$objPHPExcel->setActiveSheetIndex(0);
//for XLSX
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename="item_list.xlsx"');
header('Cache-Control: max-age=0');
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
$objWriter->save('php://output');
exit;
答案 0 :(得分:16)
您发布的文件在PHPExcel输出之前有一个空格字符...检查您的脚本以查看它可能会发送到php://输出流的位置。检查您的初始<?php
开头标记之前是否没有空格;特别注意?> <?php
或类似的结束/开始标记。并检查脚本可能为included
的所有文件
答案 1 :(得分:5)
通过在文本编辑器中打开来检查是否有任何虚假字符回显到文件中。如果有,你可以找出他们被介绍的地方。空格或换行是明显的罪魁祸首。
另外,请确保<?php
标记之前或任何文件中的?>
标记之后没有空格或换行符。
xlsx
格式实际上是xml
文件的压缩集合,因此如果文本编辑器中没有明显的文本字符串(PK签名旁边),请尝试解压缩。这可能会为这个问题提供其他线索。
如果您在Windows平台上运行,那么ZipArchive php_zip.dll
链接库的一些错误版本可能会导致此错误。您可以使用PCLZip替代ZipArchive。
答案 2 :(得分:4)
IS application/vnd.ms-excel
AND NOT
<强> application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
强>
XLS示例:
$objPHPExcel = new PHPExcel();
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename="item_list.xlsx"');
header('Cache-Control: max-age=0');
$objWriter->save('php://output');
XLSX示例:
$objPHPExcel = new PHPExcel();
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename="item_list.xlsx"');
header('Cache-Control: max-age=0');
$objWriter->save('php://output');
答案 3 :(得分:1)
编写Excel文件不仅仅是为任意文件提供xlsx或xls的扩展名。
你可以写一个BIFF5或BIFF8 xls文件(所有版本的Excel post 95都会读这个),或者有Excel 2003 XML格式,可以通过Excel 2003和Excel2007(以及Excel 2010)打开
有关excel 2007的更多详细信息和示例,请参阅PHPExcel examples页面。
如果我能为您提供更多帮助,请告诉我。
答案 4 :(得分:0)
我遇到了同样的问题,发现有一个新的行字符,它来自所需数据的开头并导致了这个错误。后来我发现我有一个有关闭标签的php文件
"?>"
通常建议人们应该避免使用关闭php标记,因为它们也会转到输出缓冲区。使用ob_end_clean()也是不错的选择。
可以找到更多详细信息Why would one omit the close tag?
答案 5 :(得分:0)
我解决了我的问题,我使用命令
安装了zipsudo apt-get install php7.0-zip 并重新启动服务器 sudo服务apache2重新启动 这个对我有用 我使用了https://github.com/PHPOffice/PhpSpreadsheet