关于 php:PHPExcel 警告/打开文档时出错

PHPExcel Warning/Error when opening document

我使用 PHPExcel 库构建了一个 Excel 文档。我的文档在 Numbers (mac) 和 Office 2007 (windows) 中打开并且看起来都很好。我将我的文件保存为 .xlsx 文件。

当我打开文件时,虽然它显示正常,但它会给出以下错误/警告。

在 Numbers 中,它给出警告"不支持工作表上的密码保护并已被删除"

在 Office 2007 中,它给出错误"Excel 在 'filename.xlsx' 中发现不可读的内容。您要恢复此工作簿的内容吗?如果您信任此工作簿的来源,请单击是。"当我单击"是"时,一切都显示正常,并显示"已删除记录:从 /sl/worksheets/sheet1.xml 部分合并单元格"。

需要注意的是,我没有在我的文件中添加任何密码。我也只有一本工作簿。有谁知道我怎样才能摆脱这些或可能导致它们的原因?


我遇到了同样的问题,我解决了简单地放一个

1
exit();

就在 $objWriter->save('php://output'); 命令之后。

例如

1
2
3
4
5
6
7
8
// Redirect output to a client’s web browser (Excel2007)
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename="industrializzazione_RTW_'.$rows[0]['stagione'].'.xlsx"');
header('Cache-Control: max-age=0');

$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
$objWriter->save('php://output');
exit();


我在使用 CakePHP 使用合并单元构建电子表格时遇到了类似的情况。它适用于 Excel 2003,但不适用于 Excel 2007 格式。如果我使用以下方法构建 2007 电子表格:

1
$objPHPExcel->getActiveSheet()->mergeCells('C30:E30');

电子表格加载正常。但是以任何方式使用变量,例如这些变体:

1
2
3
4
5
$mergestr = '\'C'.(30+$i).':E'.(30+$i).'\'';
$objPHPExcel->getActiveSheet()->mergeCells($mergestr);
$objPHPExcel->getActiveSheet()->mergeCells(eval("return \\$$mergestr;"));
$objPHPExcel->getActiveSheet()->mergeCells('\'C'.(30+$i).':E'.(30+$i).'\'');
$objPHPExcel->getActiveSheet()->mergeCells('C'.(30+$i).':E'.(30+$i));

我遇到了同样的错误。我不确定是否有办法以 PHPExcel 喜欢 Excel2007 编写器的方式转义变量。 Excel5 编写器适用于上面的最后一个示例。希望这对某人有帮助。