2012-02-27 29 views

回答

42

您可以使用寫入器保存到磁盤,或保存到php://輸出。如果後者,你可以使用輸出緩衝來捕獲該輸出,然後存儲在一個變量....不知道爲什麼你想這樣做。

$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); 
ob_start(); 
$objWriter->save('php://output'); 
$excelOutput = ob_get_clean(); 
+3

謝謝。如果我在像symfony這樣的框架內使用這個,我可能需要將內容從excel服務傳遞給某種類型的輸出服務或控制器。我寧願避免寫入磁盤的打擊。 – Aaron 2012-02-28 18:55:56

+5

你意識到,它可能是令人難以置信的內存飢渴,把整個文件保存在PHP內存中 – 2012-02-28 21:12:41

+0

一個公平的問題。感謝您的建議。 – Aaron 2012-02-29 02:02:22

0

由於PHPExcel將文件寫入到磁盤在任何情況下,如果捕獲標準輸出,什麼內部發生的情況是,該文件被寫入到磁盤,然後從磁盤讀取(或刪除),打印到stdout然後在輸出緩衝區中捕獲。

你不妨這樣做:

$tmpfile = tempnam($tmp_dir, 'phpxltmp'); 

$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); 
$objWriter->save($tmpfile); 

$excelOutput = file_get_contents($tmpfile); 
unlink($tmpfile); 
+2

這是一種常識,關於如何處理這個問題,但這種方法有很多缺點。 您創建/使用需要更多操作/時間/空間的磁盤。 如果此腳本在多個實例或重疊中運行,則需要爲每個實例生成一個不同的文件。這可能會導致腐敗/問題。 該OP已經直接說一個變量,而不是一個文件,然後到一個變量。 – Mayhem 2017-07-13 04:24:18

+0

答案已經解決了這些缺點。 'tempnam'爲每個實例創建一個不同的文件,並且由於PHPExcel在任何情況下都使用一個文件,所以它顯然是「直接變量」的方法,效率較低。在許多情況下,可以使用'readfile'或流處理來避開內存問題並進一步提高性能。雖然接受的答案似乎更直接,這本身就很有價值,但我仍然認爲*這個*應該是被接受的答案,或者是一個可信的選擇。 – LSerni 2017-10-20 07:47:58

相關問題