7

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;
4

7 回答 7

28

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;
于 2015-07-16T07:36:30.787 回答
19

您发布的文件在 PHPExcel 输出之前有一个空格字符...检查您的脚本以查看可能将其发送到 php://output 流的位置。<?php检查您的初始开始标签之前是否没有空格;特别注意?> <?php或类似的结束/开始标签。included并检查您的脚本可能包含的任何文件

于 2013-05-30T08:21:35.230 回答
6

通过在文本编辑器中打开文件来检查是否有任何虚假字符回显到文件中。如果有,您可能会弄清楚它们被介绍到哪里。空格或换行符是明显的罪魁祸首。

此外,请确保在任何文件中<?php的标记之前或标记之后没有空格或换行符?>

xlsx格式实际上是xml文件的压缩集合,因此如果在文本编辑器中没有可见的明显文本字符串(PK 签名旁边),请尝试解压缩它。这可能会为这个问题提供其他线索。

如果您在 Windows 平台上运行,那么 ZipArchivephp_zip.dll链接库的一些错误版本可能会导致此错误。您可以使用 PCLZip 作为 ZipArchive 的替代品。

于 2013-05-29T05:18:14.580 回答
3

application/vnd.ms-excel

并不是

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');
于 2014-12-10T15:43:30.377 回答
1

编写 Excel 文件不仅仅是为任意文件赋予 xlsx 或 xls 扩展名的问题。

您可以编写一个 BIFF5 或 BIFF8 xls 文件(所有版本的 Excel 95 后都会读取此文件),或者有 Excel 2003 XML 格式,可以由 Excel 2003 和 Excel2007(以及 Excel 2010)打开。

有关 excel 2007 的更多详细信息和示例,您可以参考PHPExcel 示例页面。

让我知道我是否可以为您提供更多帮助。

于 2013-05-29T05:14:17.950 回答
0

我遇到了同样的问题,发现有一个换行符,它来自所需数据的开头并导致此错误。后来我发现我有一个带有结束标签的php文件

"?>" 

通常建议应该避免使用关闭 php 标记,因为它们也会转到输出缓冲区。使用 ob_end_clean() 也是不错的选择。

可以找到更多详细信息为什么要省略关闭标签?

于 2016-07-06T20:13:35.740 回答
0

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

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

于 2018-11-30T05:31:18.360 回答