$workbook = new PHPExcel();
$workbook->createSheet()->setTitle('whatt')->setCellValue( 'A1', 'Another sheet' );
$workbook->createSheet()->setTitle('whatt')->setCellValue( 'A1', 'Another sheet' );
$objWriter = new PHPExcel_Writer_Excel2007($workbook);
$objWriter->setOffice2003Compatibility(true);
ob_start();
$objWriter->save( "php://output" );
$contents = ob_get_contents();
ob_end_clean();
// required for IE, otherwise Content-disposition is ignored
if(ini_get('zlib.output_compression'))
ini_set('zlib.output_compression', 'Off');
$size = count($contents);
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: private",false);
header('Content-Type: application/vnd.msexcel; charset=utf-8');
header("Content-Disposition: attachment; filename=\"test.xlsx\"");
header("Content-Transfer-Encoding: binary");
header("Content-Length: {$size}");
echo $contents;
exit;
当我下载工作表时,它下降为 1 个字节,其中第一个单元格是“P”的createSheet
工作表(因为文件只包含那个字母)如果我注释掉第二行,它就完美了。任何想法?
编辑
我接受了下面的答案,它告诉我这不是 PHPExcel 的错,也不是。如果我删除标题并保持输出缓冲,作为测试,它仍然有效。
ob_start();
$objWriter->save( "php://output" );
$contents = ob_get_contents();
ob_end_clean();
file_put_contents( "/mypath/uploads/test.xlsx", $contents );
我可以下载文件没有问题。这让我相信标题以某种方式搞砸了,考虑到如果我只使用一次 createSheet 就没有问题,这是非常奇怪的。我想当我弄清楚时我会在这里发布。
……
我弄清楚了为什么标题搞砸了。显然使用count($contents)
添加一张纸很好,但添加两张纸它只会返回1
。我将其更改为strlen($contents)
并且有效。如果有人能告诉我为什么会这样,加分:)