PHPExcel生成的excel文件无法正常工作。 (文件格式或扩展名无效)

时间:2013-05-29 05:02:16

标签: php export phpexcel

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;

6 个答案:

答案 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)

我解决了我的问题,我使用命令

安装了zip

sudo apt-get install php7.0-zip 并重新启动服务器 sudo服务apache2重新启动 这个对我有用 我使用了https://github.com/PHPOffice/PhpSpreadsheet