PHPExcel生成的excel文件不工作。(文件格式或扩展名无效)
PHPExcel生成的excel文件不工作。(文件格式或扩展名无效) PHPExcel的示例代码在我的本地PC上成功地执行,文件被下载到本地并在Excel 2007中成功打开。 但是在我的服务器上使用相同的代码会给excel提供一个无效的文件,当我打开并修复该文件时,它会成功打开 我不想使用“打开并修复”选项,只想使用“打开”选项 找不到问题吗?请帮忙PHPExcel生成的excel文件不工作。(文件格式或扩展名无效),php,export,phpexcel,Php,Export,Phpexcel,PHPExcel生成的excel文件不工作。(文件格式或扩展名无效) PHPExcel的示例代码在我的本地PC上成功地执行,文件被下载到本地并在Excel 2007中成功打开。 但是在我的服务器上使用相同的代码会给excel提供一个无效的文件,当我打开并修复该文件时,它会成功打开 我不想使用“打开并修复”选项,只想使用“打开”选项 找不到问题吗?请帮忙 $objPHPExcel->setActiveSheetIndex(0); //for XLSX header('Content-Typ
$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;
编写Excel文件不仅仅是为任意文件提供xlsx或xls扩展名的问题 您可以编写一个BIFF5或BIFF8 xls文件(所有版本的Excel post 95都会读取此文件),也可以使用Excel 2003和Excel 2007(以及Excel 2010)打开Excel 2003 XML格式 有关excel 2007的更多详细信息和示例,请参阅该页
如果我能为您提供更多帮助,请告诉我。在文本编辑器中打开文件,检查是否有任何虚假字符被回音到文件中。如果有的话,你可能会知道他们被介绍到哪里。空格或换行显然是罪魁祸首 另外,请确保任何文件中的
标记前没有空格或换行符
xlsx
格式实际上是xml
文件的压缩集合,因此如果在文本编辑器中没有明显的文本字符串(PK签名旁边),请尝试解压缩它。这可能会为这个问题提供其他线索
如果您在Windows平台上运行,那么ZipArchive
php_zip.dll
链接库的一些错误版本可能会导致此错误。您可以使用PCLZip作为ZipArchive的替代品。您发布的文件在PHPExcel输出之前有一个空格字符。。。检查您的脚本以查看此文件可能发送到的位置php://output 流动检查您的初始是否为应用程序/vnd.ms excel
而不是
应用程序/vnd.openxmlformats of icedocument.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');
$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');
XLSX示例:
$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');
$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');
添加一行ob_end_clean()代码>在程序末尾的$objWriter->save('php://output');代码>
代码如下所示:
//对于XLSX
$objPHPExcel->setActiveSheetIndex(0);
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');
ob_end_clean();
$objWriter->save('php://output');
exit;
我遇到了同样的问题,发现有一个新行字符,它来自所需数据的开头,并导致了这个错误。后来我发现我有一个php文件,上面有结束标记
"?>"
通常建议避免使用关闭php标记,因为它们也会进入输出缓冲区。使用ob_end_clean()也是一个不错的选择
可以找到更多详细信息我解决了我的问题,我使用命令安装了zip
sudo apt get安装php7.0-zip
然后重新启动服务器
sudo服务apache2重启
它对我有用
我在不知道xlsx文件的确切内容的情况下使用了,很难确定MS Excel抱怨的几百万种可能性中的哪一种。。。您正在使用哪些其他功能(如自动过滤器、图表等)?什么版本的MS Excel?如果您将文件写入服务器的磁盘而不是通过浏览器保存,您是否仍然存在相同的问题?如果您使用Excel5 Writer并另存为.xls文件,它还会抱怨吗?你能将该文件的副本上传到PHPExcel网站进行调查吗?@Mark Baker:不,在服务器上,该文件是正确生成的,当我下载它时,它在excel中成功打开,没有任何问题。这几乎肯定意味着你的脚本正在将某些内容回传到服务器中php://output 流动无论是前导或尾随空格或空行,还是?>
和之间的间隙,先生,我正在重新检查它,我正在将excel文件上载到PHPExcel网站,请检查。那会很有帮助的。只有两列两行,我已经删除了所有空格。我已经发布了我的excel文件,请查看,我仍然无法解决问题:(使用文本文件编辑器打开的想法对我帮助很大。我在损坏的excel文件的开头找到了额外的选项卡。我可以删除尽可能多的空白,但仍然不起作用,在输出之前找不到单个空格,所以我找到了ob_end_clean()在stackoverflow上的一篇文章中,使用了它,它起了作用。ob\u end\u clean()
总是会有一个解决办法……在某个地方,会有一个空格或BOM标题或一些输出文本导致这个问题……正确的解决办法总是识别该输出并消除它。我也有同样的问题,用ob\u end\u clean()解决了;READ@sqlchild格式为application/vnd.ms-excelgreat。对我也有用。