在用我的数据加载PHPExcel对象后,我希望将内容直接输出到一个php变量中,而不是写入文件。我错过了这样做的方法吗?因为似乎唯一的保存方式是保存到磁盘上。
你可以使用一个写入器将数据保存到磁盘,或者保存到php://output。如果选择后者,你可以使用输出缓冲来捕获该输出并将其存储在变量中......不确定为什么你要这样做。
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
ob_start();
$objWriter->save('php://output');
$excelOutput = ob_get_clean();
由于PHPExcel无论如何都会将文件写入磁盘,所以如果你捕获标准输出流,内部会发生以下过程:文件先被写入磁盘,然后从磁盘读取(并删除),再打印到标准输出流中,最后被捕获到输出缓存区中。
你可以这么做:
$tmpfile = tempnam($tmp_dir, 'phpxltmp');
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
$objWriter->save($tmpfile);
$excelOutput = file_get_contents($tmpfile);
unlink($tmpfile);
tempnam
会为每个实例创建一个不同的文件,而且由于PHPExcel在任何情况下都要使用文件,因此“直接转变为变量”方法似乎是效率较低的方法。在许多情况下,可以使用readfile
或流处理来避开内存问题并进一步提高性能。尽管被接受的答案看起来更为简单,这本身就很有价值,但我仍然认为这个应该是被接受的答案,或者是可信的替代方案。 - LSerni