2011-12-19 125 views
72

你好,我是新來phpexcel, ,我想知道是否有某種方式發送了Excel我已經建立到客戶端下載,但不保存在我的服務器或他下載它phpexcel下載

後立即將其刪除

我想在頁面上創建一個「導出按鈕」,它會給用戶一個「彈出式窗口」,他希望我剛剛創建的excel。

現在經過我創建表我做的:

$objXLS->getActiveSheet()->getColumnDimension("A")->setAutoSize(true); 
$objXLS->getActiveSheet()->getColumnDimension("B")->setAutoSize(true); 

$objXLS->getActiveSheet()->setTitle('Test Stats'); 

$objXLS->setActiveSheetIndex(0); 

$objWriter = PHPExcel_IOFactory::createWriter($objXLS, 'Excel5'); 
$objWriter->save(__DIR__."/test1.xls"); 

但其保存到我的服務器

謝謝

回答

152

相反,它保存到一個文件中,保存到php://output­Docs

$objWriter->save('php://output'); 

這會將它按原樣發送到瀏覽器。

你想添加一些headers­Docs第一,就像它與文件下載常見,因此瀏覽器知道哪些類型的文件,它應該如何命名(文件名):

// We'll be outputting an excel file 
header('Content-type: application/vnd.ms-excel'); 

// It will be called file.xls 
header('Content-Disposition: attachment; filename="file.xls"'); 

// Write file to the browser 
$objWriter->save('php://output'); 

首先做頭,然後保存。對於excel標題,請參閱以下問題:Setting mime type for excel document

+1

即時得到要下載的文件,但它不是我所創建 當我做$ objWriter->保存(「PHP://輸出」),它打亂了我的洞頁= \ – 2011-12-19 19:32:30

+1

注意,您在該頁面上輸出的唯一內容是來自兩個「標題」行和「 - > save()」操作的輸出。您需要決定a)顯示一個頁面*或* b)提供下載。兩者都不能輕鬆使用一個腳本。但是,您可以爲下載創建一個腳本,爲頁面創建一個腳本,並在腳本執行完成後重定向到下載腳本,這將使瀏覽器提供另存爲對話框。 – hakre 2011-12-19 20:50:46

+0

我的問題是,我使用joomla,我找不到從空白頁面加載它的方法。每次我嘗試我拿到菜單和所有的孔joomla頁面。你知道我在哪裏可以找到這個問題的答案嗎?我不想垃圾郵件堆棧溢出... – 2011-12-20 22:35:45

20
$excel = new PHPExcel(); 
header('Content-Type: application/vnd.ms-excel'); 
header('Content-Disposition: attachment;filename="your_name.xls"'); 
header('Cache-Control: max-age=0'); 

// Do your stuff here 

$writer = PHPExcel_IOFactory::createWriter($excel, 'Excel5'); 

// This line will force the file to download 
$writer->save('php://output'); 
+0

你好,謝謝你的回答。我把行$ writer-> save('php:// output');並且它不下載它在頁面上打印垃圾的文件。你知道爲什麼會發生這種情況? – 2011-12-22 15:07:22

+0

你是否也設置了標題? – matino 2011-12-22 15:11:31

+0

是的。 (我不得不填寫15個字符來發表評論) – 2011-12-22 15:38:33

5

使用此電話

$objWriter->save('php://output'); 

要輸出XLS表給你所在的頁面,只是確保你在頁面上沒有其他迴音的,印刷的,輸出。

+0

在共享主機上工作時,使用$ objWriter-> save('php:// output')時會出現錯誤(可能與文件和文件夾權限有關)。未捕獲異常'PHPExcel_Writer_Exception',並顯示消息'無法打開php://輸出以進行寫入。'在third_party/PHPExcel/Writer/Excel2007.php:241堆棧跟蹤:#0 – Enrique 2015-10-28 15:42:56

+0

我想建立一個PPT使用PHPPowerpoint,完全沒有提到的步驟,但更改'MIME'類型爲'application/vnd.openxmlformats-officedocument .presentationml.presentation',它正在我的系統上下載文件,但卻說'文件無法打開'。當代碼寫入服務器時,文件正在工作。 – void 2016-01-16 08:17:45

4

posible你已經解決了你的問題,任何方式,我希望這可以幫助你。

下載的所有文件都以空行開始,在我的情況下有四個空的 行,這就產生了問題。無論您使用的是readfile();還是 save('php://output');,都可以在ob_start();處添加 開頭的腳本和od_end_clean();之前的readfile();或 save('php://output');

+0

您遇到的問題與您的錯誤日誌記錄和報告有關:您沒有看到可能會指出問題的警告:已發送的標頭。這是在這個參考問題中概述:http://stackoverflow.com/q/8028957/367456 – hakre 2014-09-26 06:59:28

+1

'ob_end_clean()'不'od_end_clean()' – turson 2015-05-06 08:35:21

5

FOR USE XLSX

$ xlsName名來自XLSX與擴展。 示例:$ xlsName ='teste.xlsx';

$objPHPExcel = new PHPExcel(); 

$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); 
header('Content-Type: application/vnd.ms-excel'); 
header('Content-Disposition: attachment;filename="'.$xlsName.'"'); 
header('Cache-Control: max-age=0'); 
$objWriter->save('php://output'); 

FOR USE XLS

$ xlsName從擴展XLS名。 示例:$ xlsName ='teste。XLS';

$objPHPExcel = new PHPExcel(); 

$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); 
header('Content-Type: application/vnd.ms-excel'); 
header('Content-Disposition: attachment;filename="'.$xlsName.'"'); 
header('Cache-Control: max-age=0'); 
$objWriter->save('php://output'); 
+3

** PSI .: XLS格式是默認定義'Excel5'和XLSX是'Excel2007'。** – 2014-12-10 15:10:01

+0

我正在嘗試使用PHPPowerpoint構建PPT,完全按照提到的步驟進行,但將'MIME'類型更改爲'application/vnd.openxmlformats-officedocument.presentationml.presentation',它正在下載文件在我的系統上,但說'文件無法打開'。當代碼寫入服務器時,文件正在工作。 – void 2016-01-16 08:17:55

+0

xlsx的內容類型應爲:「application/vnd。openxmlformats-officedocument.spreadsheetml.sheet「見http://filext.com/faq/office_mime_types.php – kojow7 2016-05-02 16:38:18

3
header('Content-type: application/vnd.ms-excel'); 

header('Content-Disposition: attachment; filename="file.xlsx"'); 

header('Cache-Control: max-age=0'); 

header ('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); 

header ('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT'); 

header ('Cache-Control: cache, must-revalidate'); 

header ('Pragma: public'); 

$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); 

$objWriter->save('php://output'); 
+0

我正在嘗試使用PHPPowerpoint構建PPT,完全按照提到的步驟進行,但將'MIME'類型更改爲'application/vnd.openxmlformats-officedocument.presentationml.presentation',它正在我的系統上下載文件,但卻說'文件無法打開'。當代碼寫入服務器時,文件正在工作。 – void 2016-01-16 08:18:11