2012-07-30 62 views
0

我正在使用PHPExcel生成excel文件(瘋狂的權利?)與我從數據庫中獲得的信息,事情是每當我創建文件它被保存在服務器,然後我只是發送一個鏈接到該文件的用戶以便他可以訪問它。如何直接向用戶輸出EXCEL文件而無需在本地存儲?

我懷疑這是做這件事的正確方法,我在尋找的只是發送文件到瀏覽器而不保存在服務器上。

如何直接向用戶輸出EXCEL文件而無需本地存儲?

代碼:

$fileName = "Request_" . $idRequest . "_Update.xls"; 
$objWriter = PHPExcel_IOFactory::createWriter($excel, 'Excel5'); 
$objWriter->save($fileName); 
$objPHPExcel = PHPExcel_IOFactory::load($fileName); 


echo json_encode(array(
     "ExitCode" => 0, 
     "Message" => "Success",    
     "data" => $request, 
     "File" => "../reports/$fileName" 
    )); 

一旦我在$.ajax呼叫接收它只是把它添加到一個錨標記收到File

$.ajax({ 
     ... 
     success : function(response){ 
      $('#container').append('<a href="'+response.File+'">Here is your file</a> 
     } 

回答

1

this question接受的響應顯示如何處理一個成功響應來提供下載的文件,或者通過JS處理(例如,當前HTML頁面中顯示的),而不MIME類型失敗響應問題

+0

這個答案在多個瀏覽器中是否兼容?我剛剛使用Ajax與jQuery – 2012-07-31 15:50:44

+1

沒有保證 - 我不是一個JS或瀏覽器專家,但它是我能想出的最好的答案,看起來好像它應該工作 – 2012-07-31 16:07:59

+0

謝謝我一定會嘗試它,我會讓你知道的 – 2012-07-31 17:21:24

1

您可以發送

header("Content-Disposition: attachment; filename=\"file.xls\"");

強制下載,然後

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

說瀏覽器,你要發送一個Excel文件,最後只是呼應了文件作爲HTML table

<?php 
header("Content-Disposition: attachment; filename=\"file.xls\""); 
header("Content-type:application/vnd.ms-excel"); 
echo "<html><table>...</table></html>"; // your table data here.. 
?> 

Excel可以打開.html文件與<table> s所以應該沒有任何問題。

+0

你能更具體一點嗎? – 2012-07-30 19:01:34

+0

@IsaacGonzalez這有意義嗎? – 2012-07-30 19:07:28

+0

好吧,我現在得到它,但事情是,因爲我對文件中的內容做了一些其他操作,所以我不會輸出所有內容作爲'

'而不重新執行很多我的代碼。 +1爲你的幫助 – 2012-07-30 19:18:24

2

檢查一下。

// reset all output buffering 
    while (ob_get_level() > 0) { 
     ob_end_clean(); 
    } 
    header('Content-type: application/ms-excel'); 
    header('Content-Disposition: inline; attachment; filename='.$filename); 

    // we can't send any more headers after this 
    flush(); 

    $excel = new PhpExcel(); 
    $excel->setActiveSheetIndex(0); 
    $sheet = $excel->getActiveSheet(); 
    // in this example, $data was an array in the format row => value 
    // data structure is not relevant to issue 
    foreach ($data as $key => $value) { 
     // add data to sheet here 
     $sheet->SetCellValue('A' . $key, $value); 
     // etc... 
    } 
    $writer = new PHPExcel_Writer($excel); 
    // push to browser 
    $writer->save('php://output'); 
相關問題